0

私は最近ReactiveSwiftをプロジェクトに組み込み始めました。<〜演算子を使ってプロパティを設定しようとすると、なぜ私のコードのこの部分が私にコンパイルエラーを与えているのかわかりません。だからここオプションMutablePropertyの反応スウィフトバインディングが設定されていませんか?

は、私は私がいないので、オプションのプロパティようにそれを設定しているので、私はこれまでのところ、あなたは私にエラーを与える線の上に見ることができるように

let bodyDetailViewModel = MutableProperty<BodyDetailViewModel?>(nil) 

bodyManager = BodyManager() 

let bodyDetailReadySignal = Signal.combineLatest(bodyManager.bodypartName.signal, 
                bodyManager.bodypartDetail.signal, 
                bodyManager.bodypartThumbnail.signal, 
                bodyManager.bodypartHighlighted.signal) 

bodyDetailViewModel <~ bodyDetailReadySignal.map { 
    if $3 == nil { return nil } // this line says Nil is incompatible with BodyDetailViewModel 
    return BodyDetailViewModel(name: $0, detail: $1, thumbnail: $2, highlighted: $3!) 
} 

が私に混乱しているものですなぜその無価値の言い方が矛盾しているのかを理解する。また、これを行うより良い方法がある場合は、迅速な反応性ココアのためのリソースを見つけることが難しいと私に知らせてください。

+0

'Map'クロージャの型アノテーションを追加して、' BodyDetailViewModel? 'を返すことを明示的に示すようにしてください。 – jjoelson

答えて

1

これはスウィフトの型推論の制限のようです。私はReactiveSwiftを使用せずに、同様のエラーを再現することができます:スウィフト3.1.1で

let arr = [1, 2, 3, 4] 

let newArr = arr.map { elem in 
    if elem % 2 == 1 { return nil } 
    return elem/2 
} 

を、これはエラーを与える「複雑な閉鎖戻り値の型を推論することができない。明確にするために明示的な型を追加します」。

これは動作します:

let arr = [1, 2, 3, 4] 

let newArr = arr.map { elem -> Int? in 
    if elem % 2 == 1 { return nil } 
    return elem/2 
} 

だからあなたの閉鎖定義に-> BodyDetailViewModel?を追加してみてください、それが動作するかどうかを確認します。

関連する問題