【问题标题】:How to check for NSDecimalNumber.zero() in Swift如何在 Swift 中检查 NSDecimalNumber.zero()
【发布时间】:2014-06-14 19:27:11
【问题描述】:

使用“num1”作为比较参考来确定“num2”或“num3”是否为零。已经在 Objective-C 中成功地做到了这一点,并且正在尝试在 Swift 中做到这一点:

let num1: NSDecimalNumber = NSDecimalNumber.zero()
let num2: NSDecimalNumber = NSDecimalNumber.decimalNumberWithString("0")
let num3: NSDecimalNumber = NSDecimalNumber.decimalNumberWithString("0.000001")

if num1.compare(num2) == NSOrderedSame {
    println("They match")
}

此尝试导致:“错误:使用未解析的标识符 'NSOrderedSame'。” 在 Swift 中完成此任务的正确方法是什么? (已经搜索了这本书和网络,但遗漏了一些可能很明显的东西,谢谢)。

【问题讨论】:

    标签: swift nsdecimalnumber


    【解决方案1】:

    你的意思是:num1.compare(num2) == NSComparisonResult.OrderedSame

    【讨论】:

    • 是的!谢谢,这正是我想要的。现在学习如何在苹果文档中找到自己:)
    • Swift 可以推断出NSComparisonResult,所以你可以放弃它(仍然需要.
    【解决方案2】:

    Swift 中可以以更简单的方式发生,例如这个:

        if num1 == num2 {
            println("They match")
        }
    

    背景

    (摘自Using Swift Cocoa and Objective-C APIs对象比较部分)

    SwiftObjective-C 对象通常在 Swift 中使用 ===== 运算符进行比较。 Swift 为派生自 NSObject 类的对象提供了 == 运算符的默认实现。在此运算符的实现中,Swift 调用定义在 NSObject 类上的 isEqual: 方法。

    【讨论】:

    • 你确定NSNumber 对象是这样吗?
    • 我目前找不到引用(我会的),但 Swift 自动将那些 == 运算符转换为 Obj-C 对象的 -isEqual: 方法,例如NSNumbers.
    • 我正在尝试再次找到它...公平地说,在过去的两周里,我一直在阅读所有可能的 Swift 文档,但我不知道我在哪里找到它...但我会再次找到它,因为那将是一个非常有用的信息。
    • 根据我的测试,它似乎工作,也将寻找参考。 (虽然我还没有测试过 NSOrderAscending 和 NSOrderDescending 的情况)。
    • @LeoNatan,我再次找到了参考资料,并添加到我的答案中。
    【解决方案3】:

    如果您经常使用 NSDecimalNumber,我将在此处插入我自己的运算符重载:https://gist.github.com/anisoptera/5708afc32454ed868363

    处理令人讨厌的不清楚的“NSOrdered...”比较,甚至可以让你做一些疯狂的事情,比如用 + 运算符添加两个 NSDecimalNumbers!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2015-03-20
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多