【问题标题】:Struct Memberwise Initialization - Omitting values for properties that have defaultsStruct Memberwise Initialization - 省略具有默认值的属性的值
【发布时间】:2019-06-27 07:52:05
【问题描述】:

我是 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。

【问题讨论】:

  • 该代码在 Swift 操场上对我来说工作得很好。你用的是什么版本的 Xcode?​​span>
  • 这需要 Swift 5.1 (Xcode 11 beta)

标签: swift


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多