gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 10:54:25 25 4
gpt4 key购买 nike

我在 Swift 3 中有这个功能:

if let rating = product.rating as? Float {
itemRating.update(rating) //sets item rating. Number of stars
}

其中 product.rating 是来自 Objective C 函数的 NSDecimalNumber

我正在将所有内容转换为 Swift

每次我调用 itemRating.update(rating) 它都会给出臭名昭著的结果:

fatal error: unexpectedly found nil while unwrapping an Optional value

我让它工作的唯一方法是通过这个丑陋的实现:

if let rating = product.rating as Decimal?, let floatRating = rating as? Float {
itemRating.update(floatRating) //sets item rating. Number of stars
}

总是给出警告:

Cast from 'Decimal' to unrelated type 'Float' always fails.

我尝试过的所有其他方法都因上述错误而失败。


下面是 update() 的定义:

- (void)updateRating:(float)inRating;

这是怎么回事?

最佳答案

如果 product.rating 确实是一个 NSDecimalNumber(不是 (NS)Decimal)实例,只需使用可选绑定(bind)来解包可选然后得到floatValue 因为 NSDecimalNumber 继承自 NSNumber

if let rating = product.rating {
itemRating.update(rating.floatValue)
}

关于objective-c - 如何在没有编译器警告的情况下将 NSDecimalNumber 从 Objective-C 转换为 Swift 中的 Float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com