struct Struct1 {
let myLet = "my let"
let myLet2: Bool
let myLet3: String
}
let s1 = Struct1(myLet2: false, myLet3: "My url123")
Run Code Online (Sandbox Code Playgroud)
错误是:缺少参数参数myLet.这是为什么?它有一个默认值.
kel*_*ket 20
对于Struct,默认初始化是全部或全部.要么为所有属性定义默认值,要么获得自动生成的初始化程序Struct1()以及包含所有属性的初始化程序,或者只获得具有所有属性的初始化程序,包括任何碰巧具有设置默认值的属性.您将不得不实现自定义初始化程序.
struct Struct1 {
let myLet = "my let"
let myLet2: Bool
let myLet3: String
init(myLet2: Bool, myLet3: String) {
self.myLet2 = myLet2
self.myLet3 = myLet3
}
}
Run Code Online (Sandbox Code Playgroud)
迅速4
struct Struct1 {
let myLet: String?
let myLet2: Bool
let myLet3: String
init(myLet: String? = nil, myLet2: Bool, myLet3: String) {
self.myLet = myLet
self.myLet2 = myLet2
self.myLet3 = myLet3
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 5.1:struct在Swift 5.1(随Xcode 11一起提供)中,成员初始化行为正在发生变化,使其行为表现出您所期望的更多:
struct Struct1 {
var myVar = "my var"
let myLet2: Bool
let myLet3: String
}
// Swift 5.1 generates a memberwise init as:
// init(myVar: String = "my var", myLet2: Bool, myLet3: String)
Run Code Online (Sandbox Code Playgroud)
因此以下代码现在可以在Swift 5.1中运行:
let s1 = Struct1(myLet2: false, myLet3: "My url123")
let s2 = Struct1(myVar: "var1", myLet2: false, myLet3: "My url123")
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见相关的Swift进化建议
| 归档时间: |
|
| 查看次数: |
10350 次 |
| 最近记录: |