【问题标题】:Failable initializers and stored properties可失败的初始化器和存储的属性
【发布时间】:2015-12-07 16:29:42
【问题描述】:

我有以下课程:

class Foo {
    let a : Int?
    let b : Int?

    init?(){

    }
}

我在可失败的初始化程序中收到错误“在初始化之前使用的常量 self.a”。编译器到底在说什么?我还没用过a

【问题讨论】:

  • 我同意,这确实是愚蠢的消息......这样或那样,你的常量 a 和 b 必须在构造函数返回之前初始化(有效的类实例,或 nil)

标签: swift compiler-errors initialization swift2


【解决方案1】:

问题是在class 中用let 声明的每个属性都必须在init 返回之前填充。

在您的情况下,init 没有填充 2 个常量属性。

在 Swift 2.1 中,class 的每个常量属性都必须填充,即使可失败的初始化程序确实失败了。

class Foo {
    let a: Int?
    let b: Int?

    init?() {
        return nil // compile error
    }
}

更多详情here.

结构

另一方面,您可以使用struct,其中failable initializer 可以返回nil,而无需填充所有let 属性。

struct Person {
    let name: String

    init?(name:String?) {
        guard let name = name else { return nil }
        self.name = name
    }
}

【讨论】:

  • @cfisher:看看我在答案末尾添加的链接,有 Chris Lattner(Swift 的创造者)提供的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多