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 }
- 为什么所有方法在委托中都有相同的名字?
- 当我按下应用程序中的button时,如何打开Google地图?
- 如何检查iOS Swift 2中的WiFi是否打开或closures?
- Alamofire4迁移,苹果Mach-O链接器(编号)错误
- 领域 – 不能用现有的主键值创build对象
- 在swift中使用bridgeToObjectiveC()
- 如何从Objective-C调用Swift初始值设定项(有一个参数)?
- Bridging-header.h导致命令/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc失败,退出代码1
- 内存泄漏在swift playground / deinit {}中没有被一致地调用