结构成员初始化-省略具有默认值的属性的值

时间:2019-06-13 17:58:33

标签: swift

我是Swift的新手,并关注在线文档。具体来说,我正在研究初始化(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。

1 个答案:

答案 0 :(得分:1)

您引用了Swift 5.1 version of the Swift Programming Language guide。 Swift 5指南缺少整个段落,因为该功能是5.1的新增功能。

在Swift 5中,成员初始化器包含所有存储的属性,而与默认变量值无关,因此在创建新实例时(除非您创建自己的初始化器),您将不得不包括每个参数。

在Swift 5.1中,成员初始化器包含任何默认值,因此在创建实例时可以选择忽略这些参数。您可以在这里了解有关此新功能的更多信息:Synthesize default values for the memberwise initializer