我在Swift 3中有这个函数:
if let rating = product.rating as? Float {
itemRating.update(rating) //sets item rating. Number of stars
}
其中product.rating
是来自目标 C函数的NSDecimalNumber
。
我正在将所有内容转换为 Swift。
每次我打电话给itemRating.update(rating)
它都会给臭名昭著的人:
致命错误:解开可选值时意外发现 nil
我让它工作的唯一方法是通过这个丑陋的实现:
if let rating = product.rating as Decimal?, let floatRating = rating as? Float {
itemRating.update(floatRating) //sets item rating. Number of stars
}
它总是给出警告:
从"十进制"转换为不相关的类型"浮点型"总是失败。
我尝试的所有其他方法都因上述错误而失败。
以下是update()
的定义:
- (void)updateRating:(float)inRating;
这是怎么回事?
如果product.rating
真的是一个NSDecimalNumber
(不是(NS)Decimal
)实例,只需使用可选绑定来解开可选包,然后获取floatValue
,因为NSDecimalNumber
继承自NSNumber
。
if let rating = product.rating {
itemRating.update(rating.floatValue)
}