Swift将NSNumber的对象转换为Double
我有这个代码在Swift中,它的工作原理,但我认为有一个更好的方式来从NSNumber获取我的对象,并将其转换为双精度:
var rating: NSNumber var ratingDouble: Double rating = self.prodResult?.prodsInfo.prodList[indexPath.row].avgRating as NSNumber!! ratingDouble = Double(rating.doubleValue)
有几件事你可以做:
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)
的构造函数。 我无法在模块或文档中find它,但传递AnyObject
生成一个错误,它不能隐式地downcast到NSNumber
所以它必须在那里,而不是桥接。 - 第三项不以相同的方式使用语言特征。 它只是利用了
doubleValue
返回一个Double
的事实。
1的一个好处是它也适用于AnyObject
所以你的代码可以是:
let ratingDouble = self.prodResult!.prodsInfo.prodList[indexPath.row].avgRating! as Double
请注意,我删除了?
从你的function和感动!
无论何时使用! 你是在逃避安全?
所以没有理由一起做。
使用guard let
语法,这里是如何将AnyObject
转换为Double
guard let myVariable:Double = (myAnyObject as! NSNumber) as Double else { return }