我不确定这是一个错误还是它真的应该如何工作?
class A {
init() throws { }
}
class B {
lazy var instance = A()
}
此代码使用 XCode 9 和最新的 Swift
版本编译没有错误,并且工作完美,除非 Class A
init()
真的抛出,然后惰性变量是空指针。但是这段代码不应该以某种方式不被编译吗?
最佳答案
这确实是一个错误(SR-7862)——你不能从属性初始化上下文中抛出错误(即使你可以,你也需要在调用前加上try
),因此编译器应该产生一个错误。
我已经打开了一个拉取请求来解决这个问题(#17022)。
编辑:该补丁现已被精心挑选到 4.2 分支,因此它将针对带有 Xcode 10 的 Swift 4.2 版本进行修复(在发布之前您可以 try a 4.2 snapshot ).
关于具有 throw init 行为的 swift lazy var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675696/