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 方面的错误,还是我不太明白?

你走在正确的轨道上。这里的问题实际上是 letvar.

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 - 常量和变量