我有以下类:
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
}
}