如何在没有编译器警告的情况下将 NSDecimalNumber 从 Objective-C 转换为 Float



我在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)
}

相关内容

  • 没有找到相关文章

最新更新