【问题标题】:Swift optional values during initialization preventing default initializer inheritance初始化期间的 Swift 可选值可防止默认初始化程序继承
【发布时间】:2015-08-19 11:31:05
【问题描述】:

在斯威夫特中:

1) 如果您为类中的所有存储属性提供默认值,那么您将继承默认初始值设定项,即 - init()

-- 和--

2) 任何可选类型的属性默认值为 nil,即 - var shouldBeNill: String? //should initially be nill

-- 因此--

我希望这段代码可以工作:

class Product {
    let name: String?
}

let product = Product()

但是当我将它作为游乐场输入时,我收到错误:“类 Product 没有初始化程序”。

为什么 Product 不继承默认初始化器 init()?我知道我可以通过显式设置let name: String? = nil 来完成这项工作,但我不确定为什么我必须这样做。这是 Swift 方面的错误,还是我不太明白的地方?

【问题讨论】:

    标签: swift initialization constants optional swift-playground


    【解决方案1】:

    你在正确的轨道上。这里的问题实际上是let vs 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 - 常量和变量

    【讨论】:

    • 好问题和非常详尽的答案。
    猜你喜欢
    • 2020-04-19
    • 2016-02-16
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多