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