Необязательная цепочка для вызовов конструктора?

Я хочу опционально сыграть 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 автоматически.

Другие вопросы по тегам