考虑这段代码:
class Foo {
var a: Int
var b: Int
init(a: Int, b: String?) throws {
self.a = a
guard self.a > 0 else {
throw "Too little a!"
}
self.b = self.a
}
}
extension String: Error {}
非常荒谬,但关键是它编译得很好。现在将警卫替换为:
guard b == nil || self.a > 0 else {
不是我们得到编译器错误!
错误:在所有成员初始化之前由闭包捕获的“自我”
我在任何地方都没有看到关闭。如果条件是复合表达式,编译器guard
是否会将条件转换为闭包,从而引入错误(如果有闭包,这将是正确的)?
错误或功能?
这是 Swift 3.0.2。