可用的初始值设定项和存储的属性

时间:2015-12-07 16:29:43

标签: swift compiler-errors initialization swift2

我有以下课程:

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

    init?(){

    }
}

我得到错误"常量self.a在初始化之前使用" 在可用的初始化程序中。编译器到底在说什么?我还没有使用a

1 个答案:

答案 0 :(得分:2)

问题是必须在let返回之前填充classinit声明的每个属性。

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

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

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

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

更多详情here

STRUCT

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

struct Person {
    let name: String

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