【发布时间】:2018-10-22 08:06:39
【问题描述】:
我目前在理解 .isNan 的工作原理方面遇到问题。
我正在维护一个不是我自己开发的应用程序(在 Swift 2.3 中)。
这段代码造成了大量的崩溃,据我了解,我不明白是怎么回事。
这里是方法,它只是一种格式方法,以便通过测试不同的情况为您的标签设置适当的值。
static func formatFloat(float: Float?, withMaxDigits
max: Int, andUnit unit: String) -> String {
var label: String = "-"
if let float = float {
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
numberFormatter.minimumFractionDigits = 0
numberFormatter.maximumFractionDigits = max
numberFormatter.roundingMode = .RoundHalfUp
if !float.isNaN {
var formattedValue = numberFormatter.stringFromNumber(float)!
if(formattedValue == "-0")
{
formattedValue = "0"
}
label = "\(formattedValue) \(unit)"
}
}
return label
}
我是否正确,它只是检查以确定一个值是否为 NaN,以便测试所有内容并相应地设置文本?
我阅读了一些帖子/文档,但我不明白:
在某些语言中 NaN != NaN,但在 Cocoa 中并非如此。
nil 和 NaN 呢?我的意思是 isNan 检查是否正确?
【问题讨论】:
-
你已经知道
float不是零,因为它是有条件地展开的。就个人而言,我会有条件地打开stringFromNumber而不是强制它并删除 isNaN 测试 -
所以没有 isNan 测试的 var formattedValue = numberFormatter.stringFromNumber!(float) 更干净?
-
是的,但是
if let formattedValue = numberFormatter.stringFromNumber(float) {... -
你的意思是 if var no ?我无法为 let 常量赋值。