【问题标题】:Checking for nill equality in custom == operator在自定义 == 运算符中检查零相等
【发布时间】:2016-08-29 23:26:28
【问题描述】:

所以我有一个自定义的类相等运算符,如果它们都是 nil,我想返回 true,但是当我询问 left 或 right == nil 时,我的运算符会被调用。有没有其他或更好的方法来做到这一点?

public func == (left: classXYZ?, right: classXYZ?) -> Bool {
    if left == nil && right == nil {
        return true
    }
    if left != nil && right != nil {
        return left!.uniquID == right!.uniquID
    }
    return false
}

【问题讨论】:

  • 顺便说一句,你为什么不这样做:return left?.uniquID == right?.uniquID?如果两者都是 nil,这将返回 true。
  • 使用 nil 检查构建到另一个类中,聪明。那个deff有效。但是,如果我不能这样做,我将如何在不调用我自己的操作员的情况下进行零检查
  • 您使用的是哪个版本的 Swift?
  • Xcode 7.2 so swift 2.2 但是我不建议使用 swift 3.0 中引入的东西
  • @CWineland:我只是想重现你的场景

标签: ios swift oop null operator-overloading


【解决方案1】:

这是创建课程的代码Equatable

class ClassXYZ: Equatable {
    let uniqueID: String

    init(uniqueID: String) {
        self.uniqueID = uniqueID
    }
}

func ==(left: ClassXYZ, right: ClassXYZ) -> Bool {
    return left.uniqueID == right.uniqueID
}

你不需要(也不能)明确指定nil == niltrue,它已经内置在 Swift 中,看

let a: ClassXYZ? = nil
let b: ClassXYZ? = nil

print(a == b) // true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2021-01-27
    相关资源
    最近更新 更多