所以我最近开始尝试将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值不兼容。如果有更好的方法,请告诉我,因为我发现很难找到针对swift的reactivecocoa的资源
答案 0 :(得分: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中,这给出了错误&#34;无法推断出复杂的闭包返回类型;添加显式类型以消除歧义&#34;。
这有效:
let arr = [1, 2, 3, 4]
let newArr = arr.map { elem -> Int? in
if elem % 2 == 1 { return nil }
return elem / 2
}
因此,请尝试将-> BodyDetailViewModel?
添加到闭包定义中,看看是否有效。