【发布时间】:2016-05-15 01:30:34
【问题描述】:
我明白为什么这会产生编译器错误:
let initialProducer = SignalProducer<Int, NoError>(value:42)
let sideEffectProducer = initialProducer.on(next: { (answer: Int) in
return _
})
错误是
无法将 '(Int) -> _' 类型的值转换为预期的参数类型 '(Int -> ())?'
所以next 参数采用带有Int 参数的闭包,该参数返回Void,而我们返回_
但是为什么编译得很好:
let initialProducer = SignalProducer<Int, NoError>(value:42)
let sideEffectProducer = initialProducer.on(next: { (answer: Int) in
return ""
})
我们返回的是String,而不是Void,那么为什么编译器不抱怨呢?
【问题讨论】:
-
我也很好奇。希望@matt 能解释一下……?
-
输入参数是一个返回
something(->())的函数。它知道 void 函数不会返回something,所以它会抱怨。但是第二个函数返回something,一个字符串。这样就通过了参数检查。让回报成为你想要的东西是你的责任。 -
(Int) -> ()是一个闭包,它接受Int并返回Void,不是吗? ericasadun.com/2015/05/11/swift-vs-void。Void与“无”不一样吗?我也可以完全注释掉返回并编译...
标签: ios swift reactive-cocoa reactive-cocoa-4