具有 throw init 行为的 swift lazy var

标签 swift throw lazy-initialization

我不确定这是一个错误还是它真的应该如何工作?

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/

相关文章:

ios - Swift XMLMapper 解码嵌套属性

iOS沙盒独立文件路径

swift - 简单地等待来自异步线程的值

java : "error: unreported exception Exception; must be caught or declared to be thrown"

exception - 在mathematica中找不到文件时抛出异常

css - 如何在 LESS 编译器中抛出错误

ios - 为什么自定义委托(delegate)协议(protocol)包含可选值 - SWIFT

java - 如何配置 OpenEntityManagerInViewFilter Spring MVC

使用 self 快速惰性实例化

c# - 无法反序列化惰性对象