我有以下课程:
class Foo {
let a : Int?
let b : Int?
init?(){
}
}
我得到错误"常量self.a在初始化之前使用" 在可用的初始化程序中。编译器到底在说什么?我还没有使用a
!
答案 0 :(得分:2)
问题是必须在let
返回之前填充class
中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
}
}