我想知道在void封闭中使用[weak self]时是否有更好的方法来摆脱讨厌的编译器。这是一个例子:
class Foo {
let callback: ()->()
init() {
callback = { [weak self] in self?.bar() } // PROBLEM!
}
func bar() {
// ...
}
}
编译器报告“无法将表达式的类型'()'转换为'$ T7?'”。原因:闭包使用最后一句作为返回值。由于self
是可选的,bar()
调用结果为Void?
...不符合闭包类型()->()
。
因此,我必须像这样调整有问题的一行:
callback = { [weak self] in self?.bar(); return }
是否有更简洁的方法来安抚编译器?
感谢您的意见。
答案 0 :(得分:1)
(来自我上面的评论:)
添加显式return
语句是一个干净的解决方案。
但是,没有必要
再使用Swift 1.2(Xcode 6.3)。从测试版发布说明:
现在可以在Void上下文中使用带有非Void返回类型的未注释单表达式闭包。