【问题标题】:How to check for a Not a Number (NaN) in Swift 2如何在 Swift 2 中检查非数字(NaN)
【发布时间】:2016-02-04 16:58:16
【问题描述】:

以下方法使用两个变量计算百分比。

func casePercentage() {
        let percentage = Int(Double(cases) / Double(calls) * 100)
        percentageLabel.stringValue = String(percentage) + "%"
}

上述方法运行良好,但 case = 1 和 call = 0 除外。 这给出了一个致命错误:浮点值不能转换为 Int,因为它要么是无限的要么是 NaN

所以我创建了这个解决方法:

func casePercentage() {
    if calls != 0 {
        let percentage = Int(Double(cases) / Double(calls) * 100)
        percentageLabel.stringValue = String(percentage) + "%"
    } else {
        percentageLabel.stringValue = "0%"
    }
}

这不会出错,但在其他语言中,您可以使用 .isNaN() 方法检查变量。这在 Swift2 中是如何工作的?

【问题讨论】:

标签: swift2


【解决方案1】:

您可以使用! 运算符“强制展开”可选类型:

calls! //asserts that calls is NOT nil and gives a non-optional type

但是,如果 nil,这将导致运行时错误。

防止使用nil 或 0 的一个选项是执行您已完成的操作并检查它是否为 0。

第二个选项是nil-check

if calls != nil

第三个(也是最适合 Swift 的)选项是使用 if let 结构:

if let nonNilCalls = calls {
    //...
}

如果callsnil,则if 块的内部将不会运行。

请注意,nil-checking 和 if let不会保护您免于被 0 除。您必须单独检查。

结合第二个和你的方法:

//calls can neither be nil nor <= 0
if calls != nil && calls > 0

【讨论】:

    猜你喜欢
    • 2014-11-09
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2011-02-08
    • 2022-01-13
    • 2013-08-22
    相关资源
    最近更新 更多