Необязательная цепочка для вызовов конструктора?
Я хочу опционально сыграть NSNumber?
для Int?
, но метод инициализатора для Int
только занимает init(NSNumber)
поэтому я не могу передать NSNumber?
,
Есть ли способ для меня сжать этот код так, чтобы он использовал что-то вроде необязательной цепочки?
// number: NSNumber?
let integer = number == nil ? nil : Int(number!)
1 ответ
Решение
Int
конструкторы не принимают необязательные аргументы. Вы можете "обернуть" конструкцию в map()
:
let number : NSNumber? = ...
let n = number.map { Int($0) } // `n` is an `Int?`
Но здесь легче использовать integerValue
собственностью NSNumber
с дополнительной цепочкой:
let n = number?.integerValue // `n` is an `Int?`
или просто
let n = number as? Int // `n` is an `Int?`
со времен Свифта "мосты" между NSNumber
а также Int
автоматически.