为了账号安全,请及时绑定邮箱和手机立即绑定

为什么可选常量不会自动具有默认值nil

为什么可选常量不会自动具有默认值nil

慕妹3146593 2019-12-06 12:36:34
下面的代码工作正常struct carConfi {    var owner: String?    let brand: String = "BMW"    var currentMile: Double = 2000}let tomCar = carConfi()但是,如果我将属性的类型更改owner为常量,则初始化器会出现错误struct carConfi {        let owner: String? // Change to constant        let brand: String = "BMW"        var currentMile: Double = 2000    }let tomCar = carConfi() //error: missing argument for parameter 'owner' in call 我做了一点搜索,结果发现这是因为可选变量自动具有默认值nil我猜:因为一旦设置了常量,就无法对其进行更改,如果自动接收到可选常量,nil那么它将保持为不可更改nil,这是非常愚蠢的,并且可能会对用户不利。问题:我的大学并没有完全相信这个猜测,他告诉我一定有更多的理由。如果有人可以向我解释,我将不胜感激谢谢
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

没有使用以下任何一个设置只读(常量)字段:


初始化表达式

初始化器

几乎可以肯定地表明您的程序有错误。


由于您没有其他机会设置let字段的值,因此该字段的值将保持不变nil(或其他一些默认值)。程序员不太可能会发现这种行为是可取的,并有意地请求它。


这就是为什么Swift将这种情况标记为错误。另一方面,如果您实际上希望String常量保持不变nil,则可以添加一个表达式以将其设置为nil,并使错误静音:


let owner: String? = nil // Pretty useless, but allowed


查看完整回答
反对 回复 2019-12-06
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

常数只能设置一次,并且只能设置一次。如果您希望它为null或0,则将其设置。您总是在初始化时定义一个常量。


查看完整回答
反对 回复 2019-12-06
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

对于某些初始值设定项设置值,而对于其他初始值设定项则忽略该属性(并将其设置为默认值),似乎并不合理nil。提到的let owner: String? = nil也不允许这种行为。

查看完整回答
反对 回复 2019-12-06
  • 3 回答
  • 0 关注
  • 782 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信