Swift .isNaN了解它是如何工作的

时间:2017-01-19 21:36:11

标签: ios swift

我目前正面临着了解.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检查错误对吗?

2 个答案:

答案 0 :(得分:2)

IEEE浮点规范记录了表示NaN无效结果的某些位模式。

与NaN不同。在Swift中,只有一个可选项可以包含nil,它表示没有值。

NaN表示您执行了导致无效结果的某些操作。您应该检查isNaN属性以查看数字是否包含NaN。

编辑:

请注意,有不同的值标记为NaN,因此一个.NaN值可能不等于另一个.NaN

答案 1 :(得分:0)

不,nan是浮点数可以采用的值。 nil只能由可选的vars使用。此外,我不确定你的引言在哪里,但.nan == .nan是假的。有关详细信息,请参阅https://developer.apple.com/reference/swift/floatingpoint