失败的初始化器和存储的属性

Failable initializers and stored properties

我有以下 class:

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

    init?(){

    }
}

我在可失败初始化程序中收到错误 "constant self.a used before being initialised"。编译器到底在说什么?我还没有用过 a

问题是 class 中用 let 声明的每个 属性 必须在 init 执行 return 之前填充。

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

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

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

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

更多详情here

结构

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

struct Person {
    let name: String

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