故障初始化程序和存储的属性



我有以下类:

class Foo {
    let a : Int?
    let b : Int?
    init?(){
    }
}

我在故障初始化程序中得到错误"constant self.a used before be initialized"。编译器到底在说什么?我还没有用过a

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

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

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

class Foo {
    let a: Int?
    let b: Int?
    init?() {
        return nil // compile error
    }
}

更多详细信息请点击此处。

Struct

另一方面,您可以使用struct,其中failable initializer可以在不填充所有let属性的情况下返回nil

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

最新更新