在 Swift 中使用构造函数时,哪些类型使用默认零值初始化?
Which types initialise with default zero value when using a constructor in Swift?
查看 Swift MIDI 库,我发现一个变量初始化如下:
var client = MIDIClientRef()
我只是在意识到 MIDIClientRef 不是函数后才觉得这很奇怪,它是 UInt32
的类型别名,所以想知道为什么使用构造函数模式。
那么几个简单的问题:
- 这样初始化变量是否常见:
var myVar = Int()
?
- 使用这样的构造函数初始化时,哪些类型会使用默认零值进行初始化?
- 如果没有传入参数,如何初始化为零值?
查看 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()
查看 Swift MIDI 库,我发现一个变量初始化如下:
var client = MIDIClientRef()
我只是在意识到 MIDIClientRef 不是函数后才觉得这很奇怪,它是 UInt32
的类型别名,所以想知道为什么使用构造函数模式。
那么几个简单的问题:
- 这样初始化变量是否常见:
var myVar = Int()
? - 使用这样的构造函数初始化时,哪些类型会使用默认零值进行初始化?
- 如果没有传入参数,如何初始化为零值?
查看 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()