失败的初始化器和存储的属性
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
}
}
我有以下 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
}
}