在 Swift 中使用构造函数时,哪些类型使用默认零值初始化?

Which types initialise with default zero value when using a constructor in Swift?

查看 Swift MIDI 库,我发现一个变量初始化如下:

var client = MIDIClientRef()

我只是在意识到 MIDIClientRef 不是函数后才觉得这很奇怪,它是 UInt32 的类型别名,所以想知道为什么使用构造函数模式。

那么几个简单的问题:

查看 Swift.Math.Integers 中的 public init() 函数,评论指出它“创建一个等于零的新值”。但是我在以下代码中找不到实际创建此默认值的内容。

它是 BinaryInteger 协议的初始化程序。它被声明为

extension BinaryInteger {
    /// Creates a new value equal to zero.
    @_transparent
    public init() {
        self = 0
    } 

    // ...
}

您可以在 Integers

查看其实现

UInt32 符合 BinaryInteger 协议,需要一个 init() 方法“创建一个等于零的新值”。

还有一个默认实现,可以在 Integers.swift:

中找到
extension BinaryInteger {
  /// Creates a new value equal to zero.
  @_transparent
  public init() {
    self = 0
  }

  // ...
}

其他类型有明确的无参数初始化方法,比如all floating point types:

  @_transparent
  public init() {
    let zero: Int64 = 0
    self._value = Builtin.sitofp_Int64_FPIEEE${bits}(zero._value)
  }

示例:

let d = Double()
let f = Float()
let c = CGFloat()

最后,从 C 导入的所有类型在 Swift 中都有一个默认初始化程序,它将结构的所有字段初始化为零,如 Xcode 6 release notes. Example (from 中所述):

let hints = addrinfo()