Swift 初始化期间的可选值防止默认初始化程序继承
Swift optional values during initialization preventing default initializer inheritance
在Swift中:
1) 如果您为class中的所有存储属性提供默认值,那么您将继承默认初始化程序,即 - init()
.
-- 和--
2)任意可选类型的属性默认为nil的值,即-var shouldBeNill: String? //should initially be nill
-- 因此--
我希望这段代码能够工作:
class Product {
let name: String?
}
let product = Product()
但是当我将其输入为游乐场时,出现错误:"class Product has no initializers"。
为什么 Product 不继承默认初始化程序 init()
?我知道我可以通过显式设置 let name: String? = nil
来完成这项工作,但我不确定为什么我必须这样做。这是 Swift 方面的错误,还是我不太明白?
你走在正确的轨道上。这里的问题实际上是 let
与 var
.
let
声明了 属性 常量。在这种情况下 Product
将有一个类型为 String
的可选常量 name
,没有初始值,这当然没有意义。
编译器抱怨缺少 init()
函数,因为 let
属性允许在 init() 期间设置一次,作为对象构造的一部分,如果尚未在声明中定义,例如。
let name: String = "Im set!" // OK
let name: String? = nil // OK, but very weird :)
let name = "Im set!" // OK, type not needed, implicit.
let name: String // OK, but needs to be set to a string during init()
let name: String? // OK, but needs to be set to string or nil during init()
let name // Not OK
The Swift Programming Language - 常量和变量
在Swift中:
1) 如果您为class中的所有存储属性提供默认值,那么您将继承默认初始化程序,即 - init()
.
-- 和--
2)任意可选类型的属性默认为nil的值,即-var shouldBeNill: String? //should initially be nill
-- 因此--
我希望这段代码能够工作:
class Product {
let name: String?
}
let product = Product()
但是当我将其输入为游乐场时,出现错误:"class Product has no initializers"。
为什么 Product 不继承默认初始化程序 init()
?我知道我可以通过显式设置 let name: String? = nil
来完成这项工作,但我不确定为什么我必须这样做。这是 Swift 方面的错误,还是我不太明白?
你走在正确的轨道上。这里的问题实际上是 let
与 var
.
let
声明了 属性 常量。在这种情况下 Product
将有一个类型为 String
的可选常量 name
,没有初始值,这当然没有意义。
编译器抱怨缺少 init()
函数,因为 let
属性允许在 init() 期间设置一次,作为对象构造的一部分,如果尚未在声明中定义,例如。
let name: String = "Im set!" // OK
let name: String? = nil // OK, but very weird :)
let name = "Im set!" // OK, type not needed, implicit.
let name: String // OK, but needs to be set to a string during init()
let name: String? // OK, but needs to be set to string or nil during init()
let name // Not OK
The Swift Programming Language - 常量和变量