加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:35:17 所属栏目:百科 来源:网络整理
导读:在 Swift中: 1)如果为类中的所有存储属性提供默认值,则继承默认初始值设定项,即 – init(). – 和 – 2)任何可选类型的属性默认值为nil,即 – var shouldBeNill:String? //最初应该是nill – 因此 – 我希望这段代码能够正常工作: class Product { let n
在 Swift中:

1)如果为类中的所有存储属性提供默认值,则继承默认初始值设定项,即 – init().

– 和 –

2)任何可选类型的属性默认值为nil,即 – var shouldBeNill:String? //最初应该是nill

– 因此 –

我希望这段代码能够正常工作:

class Product {
    let name: String?
}

let product = Product()

但是当我把它作为游乐场输入时,我得到错误:“类产品没有初始化器”.

为什么Product不继承默认的初始化程序init()?我知道我可以通过显式设置let name:String来完成这项工作吗? =零,但我不确定为什么我必须这样做.这是斯威夫特方面的错误,还是有些东西我不太理解?

解决方法

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

让声明属性不变.在这种情况下,Product将具有String类型的可选常量名称,没有初始值,这当然没有意义.

编译器抱怨缺少init()函数,因为在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 – 常量和变量

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读