未设置可选 MutableProperty 的反应性 Swift 绑定?

Reactive Swift Bindings for optional MutableProperty not getting set?

所以我最近开始尝试将 ReactiveSwift 合并到我的项目中,但我似乎无法弄清楚为什么当我尝试设置 属性使用 <~ 运算符。

这就是我目前所掌握的,

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  == nil { return nil } // this line says Nil is incompatible with BodyDetailViewModel
    return BodyDetailViewModel(name: [=11=], detail: , thumbnail: , highlighted: !)
}

所以正如你在上面看到的给我一个错误的行让我感到困惑,因为我已经将它设置为可选 属性 所以我不明白为什么它说 nil 值是不兼容的。另外,如果有更好的方法,请告诉我,因为我发现很难找到 swift

的 reactivecocoa 资源

这似乎是 Swift 类型推断限制。我可以在不使用 ReactiveSwift:

的情况下重现类似的错误
let arr = [1, 2, 3, 4]

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

在 Swift 3.1.1 中给出错误 "unable to infer complex closure return type; add explicit type to disambiguate".

这个有效:

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

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

所以尝试将 -> BodyDetailViewModel? 添加到您的闭包定义中,看看是否可行。