Подтвердить что ты не робот

Swift-конвертировать объект NSNumber в Double

У меня этот код в Swift, и он работает, но я думаю, что есть лучший способ получить мой объект из NSNumber и преобразовать его в Double:

var rating: NSNumber
var ratingDouble: Double

rating = self.prodResult?.prodsInfo.prodList[indexPath.row].avgRating as NSNumber!!

ratingDouble = Double(rating.doubleValue)
4b9b3361

Ответ 1

Есть несколько вещей, которые вы можете сделать:

var rating: NSNumber
var ratingDouble: Double

ratingDouble = rating as Double   // 1
ratingDouble = Double(rating)     // 2
ratingDouble = rating.doubleValue // 3
  • Первый элемент использует преимущество моста Objective-C, позволяющего отличать AnyObject и NSNumber как Double|Float|Int|UInt|Bool.
  • Второй элемент, по-видимому, проходит через конструктор с сигнатурой init(_ number: NSNumber). Я не мог найти его в модуле или документах, но передав AnyObject в сгенерированную ошибку, что он не может быть неявно опущен на NSNumber, поэтому он должен быть там, а не только мостом.
  • Третий элемент не использует языковые функции таким же образом. Он просто использует тот факт, что doubleValue возвращает Double.

Одно из преимуществ 1 заключается в том, что он также работает для AnyObject, поэтому ваш код может быть:

let ratingDouble = self.prodResult!.prodsInfo.prodList[indexPath.row].avgRating! as Double

Обратите внимание, что я удалил ? из вашей функции и переместил ! внутрь. Всякий раз, когда вы используете! вы избегаете безопасности ?, поэтому нет причин делать это вместе.

Ответ 2

С синтаксисом guard let, вот как преобразовать AnyObject в Double

guard let myVariable:Double = (myAnyObject as! NSNumber) as Double else {
    return
}