下面的代碼工作正常struct carConfi { var owner: String? let brand: String = "BMW" var currentMile: Double = 2000}let tomCar = carConfi()但是,如果我將屬性的類型更改owner為常量,則初始化器會出現(xiàn)錯誤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 我做了一點搜索,結果發(fā)現(xiàn)這是因為可選變量自動具有默認值nil我猜:因為一旦設置了常量,就無法對其進行更改,如果自動接收到可選常量,nil那么它將保持為不可更改nil,這是非常愚蠢的,并且可能會對用戶不利。問題:我的大學并沒有完全相信這個猜測,他告訴我一定有更多的理由。如果有人可以向我解釋,我將不勝感激謝謝
3 回答

偶然的你
TA貢獻1841條經(jīng)驗 獲得超3個贊
沒有使用以下任何一個設置只讀(常量)字段:
初始化表達式
初始化器
幾乎可以肯定地表明您的程序有錯誤。
由于您沒有其他機會設置let字段的值,因此該字段的值將保持不變nil(或其他一些默認值)。程序員不太可能會發(fā)現(xiàn)這種行為是可取的,并有意地請求它。
這就是為什么Swift將這種情況標記為錯誤。另一方面,如果您實際上希望String常量保持不變nil,則可以添加一個表達式以將其設置為nil,并使錯誤靜音:
let owner: String? = nil // Pretty useless, but allowed

肥皂起泡泡
TA貢獻1829條經(jīng)驗 獲得超6個贊
對于某些初始值設定項設置值,而對于其他初始值設定項則忽略該屬性(并將其設置為默認值),似乎并不合理nil
。提到的let owner: String? = nil
也不允許這種行為。
- 3 回答
- 0 關注
- 922 瀏覽
添加回答
舉報
0/150
提交
取消