我是 Swift 新手,正在关注在线文档。具体来说,我正在查看初始化(https://docs.swift.org/swift-book/LanguageGuide/Initialization.html https://docs.swift.org/swift-book/LanguageGuide/Initialization.html).
在“结构类型的成员初始化器”小标题下,它说:
当您调用成员初始化程序时,您可以省略任何值
具有默认值的属性。在上面的例子中,尺寸
结构的高度和宽度都有默认值
特性。您可以省略其中一个属性或两个属性,并且
初始化程序对您省略的任何内容使用默认值
然后提供了一个例子:
struct Size {
var width = 0.0, height = 0.0
}
let twoByTwo = Size(width: 2.0, height: 2.0)
let zeroByTwo = Size(height: 2.0)
print(zeroByTwo.width, zeroByTwo.height)
// Prints "0.0 2.0"
let zeroByZero = Size()
print(zeroByZero.width, zeroByZero.height)
// Prints "0.0 0.0"
但是,如果我尝试这样做,我会收到初始化错误zeroByTwo
:
无法使用类型为“(height: Double)”的参数列表调用类型“Size”的初始值设定项
我是不是误会了什么?
我正在使用 Swift 5。
你引用了Swift 5.1 版本的 Swift 编程语言指南 https://docs.swift.org/swift-book/LanguageGuide/Initialization.html。 Swift 5 指南缺少整段内容,因为该功能是 5.1 的新增功能。
在 Swift 5 中,成员初始化器包括所有存储的属性,而不考虑默认变量值,因此您在创建新实例时被迫包含每个参数(除非您创建自己的初始化器)。
在 Swift 5.1 中,成员初始化器包含任何默认值,因此您可以选择在创建实例时省略这些参数。您可以在此处阅读有关新功能的更多信息:合成成员初始值设定项的默认值 https://github.com/apple/swift-evolution/blob/master/proposals/0242-default-values-memberwise.md.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)