使用[弱自我]编写void闭包的更好方法是什么?

时间:2015-04-07 19:59:28

标签: swift

我想知道在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 }

是否有更简洁的方法来安抚编译器?

感谢您的意见。

1 个答案:

答案 0 :(得分:1)

(来自我上面的评论:) 添加显式return语句是一个干净的解决方案。 但是,没有必要 再使用Swift 1.2(Xcode 6.3)。从测试版发布说明:

  

现在可以在Void上下文中使用带有非Void返回类型的未注释单表达式闭包。