构造函数调用的可选链接?

Optional chaining for constructor calls?

我想选择性地将 NSNumber? 转换为 Int?,但是 Int 的初始化方法只需要 init(NSNumber),所以我无法传递 NSNumber?.

我有没有办法压缩这段代码,以便它使用可选链接之类的东西?

// number: NSNumber?
let integer = number == nil ? nil : Int(number!)

Int 构造函数不接受可选参数。 您可以 "wrap" 构造成 map():

let number : NSNumber? = ...
let n = number.map { Int([=10=]) } // `n` is an `Int?`

但是这里使用带有可选链接的 NSNumberintegerValue 属性 更容易:

let n = number?.integerValue // `n` is an `Int?`

let n = number as? Int // `n` is an `Int?`

因为 Swift "bridges" 在 NSNumberInt 之间自动。