swift - 未设置可选 MutableProperty 的 Reactive Swift 绑定(bind)?

标签 swift reactive-programming reactive-cocoa reactive-swift

所以我最近开始尝试将 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 $3 == nil { return nil } // this line says Nil is incompatible with BodyDetailViewModel
    return BodyDetailViewModel(name: $0, detail: $1, thumbnail: $2, highlighted: $3!)
}

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

最佳答案

这似乎是 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 中,这给出了错误“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”。

这个有效:

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

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

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

关于swift - 未设置可选 MutableProperty 的 Reactive Swift 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44562668/

相关文章:

java - 在 Android 上优雅地处理 RxJava 订阅?

c++ - RXcpp 连续从函数流式传输数据

objective-c - 以 (@) 符号为前缀的 Objective-C 宏的含义

ios - 通过框架之间的扩展实现 Swift 协议(protocol)一致性

ios - UIScrollView 内的 UITableView

ios - 如何计算tableView行高并将值传递给heightForRowAtIndexPath

java - Kotlin,响应式(Reactive)编程 : How to consume the value of one function output to another one

ios - 正在寻找用响应式(Reactive) cocoa 链接网络请求的依赖树的最优雅的方法?

swift - 设计可观察对象

ios - 如何分配 -> 发送 -> 接收 -> 转换 -> 从扩展到应用程序解除分配 UnsafeRawPointer?