swift lazy var with throw init behavior

Jui*_*uit 9 throw lazy-initialization swift

我不确定它是不是一个错误,或者它确实是应该如何运作的?

class A {
    init() throws { }
}

class B {
    lazy var instance = A()
}
Run Code Online (Sandbox Code Playgroud)

这段代码使用XCode 9和最新Swift版本编译没有错误,并且除非Class A init()真正抛出,否则工作完美,然后lazy var为空指针.但是不应该以某种方式编译这段代码?

Ham*_*ish 5

这确实是一个错误(SR-7862) - 你不能从属性初始化上下文中抛出错误(即使你可以,你也需要在调用前加上try),因此编译器应该产生错误.

我已经打开了拉动请求来解决这个问题(#17022).

编辑:补丁现在已被挑选到4.2分支,所以它将被修复为使用Xcode 10发布Swift 4.2(直到发布版本,您可以尝试4.2快照).