使用 Swift 3 初始化一个空的 NSZone 结构

Init an empty NSZone struct with Swift 3

在 Swift 2 中,我能够像这样初始化一个空的 NSZone 结构:

let z = NSZone() // ObjectiveC.NSZone

我用它来存根测试需要 NSZone 的调用。使用 Swift 3,接口已更改,因此初始化程序不再可用:

Swift 2.3:

public struct NSZone : NilLiteralConvertible {
    public init()
    /// Create an instance initialized with `nil`.
    public init(nilLiteral: ())
}

Swift 3:

public struct NSZone {
}

Apple 是否正在推动使用可选的 NSZone 而不是使用 nil 值初始化 NSZone 的旧 NSZone() 初始化程序?

尝试扩展 NSZone 以添加初始化程序导致错误:

extension NSZone {
    init() { } // Return from initializer without initializing all stored properties
}

根据 Swift 开源项目的 design doc 将 ObjC API 导入 Swift 3:

Nullable NSZone parameters are given a default value of nil. Zones are essentially unused in Swift and should always be nil.

如果您正在测试任何需要区域的调用,无论如何您都应该通过 nil