以下代码工作正常
struct carConfi {
var owner: String?
let brand: String = "BMW"
var currentMile: Double = 2000
}
let tomCar = carConfi()
Run Code Online (Sandbox Code Playgroud)
但是,如果我将属性的类型更改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
Run Code Online (Sandbox Code Playgroud)
我做了一点搜索,结果是因为可选变量自动具有默认值nil
我猜:因为一旦设置了常量,它就无法更改,如果可选常量自动收到,nil那么它将保持不变nil,非常愚蠢,可能会对用户产生影响
问:我的大学并不完全相信猜测,他告诉我必须有更多理由.如果有人能向我解释,我将非常感激
谢谢
不使用以下任一项设置只读(常量)字段:
几乎可以肯定是你的程序出错了.
由于您没有其他机会设置let字段的值,因此字段的值将保留nil(或其他默认值).程序员不太可能发现这种行为是可取的,并且故意要求它.
这就是为什么Swift将这种情况标记为错误的原因.另一方面,如果你真的希望你的String常量保持不变nil,你可以添加一个表达式来设置它nil,并使错误沉默:
let owner: String? = nil // Pretty useless, but allowed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |