初始化期间的Swift可选值可防止默认初始化程序继承

时间:2015-06-04 17:56:28

标签: swift initialization constants optional swift-playground

在斯威夫特:

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来完成这项工作,但我不确定为什么必须这样做。这是斯威夫特方面的一个错误,还是有些东西我不太理解?

1 个答案:

答案 0 :(得分:7)

你走在正确的轨道上。这里的问题实际上是let vs var

let声明属性不变。在这种情况下,Product会有一个name类型的可选常量String,没有初始值,这当然没有意义。

编译器抱怨缺少init()函数,因为在{(1}}属性允许在init()期间设置一次,作为对象构造的一部分,如果未在声明中定义,例如。

let

The Swift Programming Language - 常量和变量

相关问题