jne*_*hbs 4 initialization constants optional swift swift-playground
在Swift中:
1)如果为类中的所有存储属性提供默认值,则继承默认初始值设定项,即 - init().
- 和 -
2)任何可选类型的属性默认值为nil,即 - var shouldBeNill: String? //should initially be nill
- 因此 -
我希望这段代码能够正常工作:
class Product {
let name: String?
}
let product = Product()
Run Code Online (Sandbox Code Playgroud)
但是当我把它作为游乐场输入时,我得到错误:"类产品没有初始化器".
为什么Product不继承默认初始值设定项init()?我知道我可以通过明确设置let name: String? = nil来完成这项工作,但我不确定为什么我必须这样做.这是Swift方面的错误,还是有些东西我不太理解?
你走在正确的轨道上.这里的问题实际上是letVS var.
let声明属性常量.在这种情况下,Product将有一个可选的常量name类型String,没有初始值,这当然没有意义.
编译器抱怨缺少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
Run Code Online (Sandbox Code Playgroud)
Swift编程语言 - 常量和变量
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |