【问题标题】:Reactive Swift Bindings for optional MutableProperty not getting set?未设置可选 MutableProperty 的反应式 Swift 绑定?
【发布时间】:2017-06-15 08:36:25
【问题描述】:

所以我最近开始尝试将 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 值不兼容。另外,如果有更好的方法,请告诉我,因为我发现很难找到快速反应可可的资源

【问题讨论】:

  • 尝试为 map 闭包添加类型注释,以明确显示它返回 BodyDetailViewModel?

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


【解决方案1】:

这似乎是 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
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2018-11-17
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多