1

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

let z = NSZone() // ObjectiveC.NSZone

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

斯威夫特 2.3:

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

斯威夫特 3:

public struct NSZone {
}

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

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

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

1 回答 1

3

根据 Swift 开源项目的设计文档,用于将 ObjC API 导入 Swift 3:

可为 Null 的NSZone 参数赋予默认值nil. 区域在 Swift 中基本上没有使用,应该始终是nil.

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

于 2016-06-14T01:06:49.207 回答