在斯威夫特:
1)如果为类中的所有存储属性提供默认值,则继承默认初始值设定项,即 - init()
。
- AND -
2)任何可选类型的属性默认值为nil,即 - var shouldBeNill: String? //should initially be nill
- 因此 -
我希望这段代码有效:
class Product {
let name: String?
}
let product = Product()
但是当我把它作为游乐场输入时,我得到错误:" class Product没有初始化器"。
为什么产品没有继承默认初始值设定项init()
?我知道我可以通过明确设置let name: String? = nil
来完成这项工作,但我不确定为什么必须这样做。这是斯威夫特方面的一个错误,还是有些东西我不太理解?
答案 0 :(得分:7)
你走在正确的轨道上。这里的问题实际上是let
vs var
。
let
声明属性不变。在这种情况下,Product
会有一个name
类型的可选常量String
,没有初始值,这当然没有意义。
编译器抱怨缺少init()
函数,因为在{(1}}属性允许在init()期间设置一次,作为对象构造的一部分,如果未在声明中定义,例如。
let
The Swift Programming Language - 常量和变量