【问题标题】:Overloading equivalence (==) operator for custom class in Swift在 Swift 中为自定义类重载等价 (==) 运算符
【发布时间】:2015-05-05 01:36:55
【问题描述】:

是否可以在自定义类中为自定义类重载等价 (==) 运算符。但是我知道可以让这个运算符在类范围之外重载。欣赏任何示例代码。 提前致谢。

【问题讨论】:

标签: ios swift operator-overloading equivalence


【解决方案1】:

添加全局函数。例如:

class CustomClass {
    var id = "my id"
}

func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return lhs == rhs
}
func !=(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return !(lhs == rhs)
}

在 Swift 2 中符合 Equatable 协议

class CustomClass: Equatable {
    var id = "my id"
}

func ==(left: CustomClass, right: CustomClass) -> Bool {
    return left.id == right.id
}

在 Swift 3 中符合 Equatable 协议

class CustomClass {
    var id = "my id"
}

extension CustomClass: Equatable {
    static func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
        return lhs.id == rhs.id
    }
}

【讨论】:

  • 对于其他人读这种方式太快(就像我做的那样),请注意那些 func 声明在类之外(因此,“全局”)。
  • 请注意,如果其中一个操作数是可选的,则上述运算符不会被触发。此外,如果两个运算符的参数都是可选的,并且两个操作数都是非可选的,它不会被触发。使两个运算符的参数都隐式展开,以确保始终为您的自定义类触发它;但请确保处理 nil 情况,否则您的程序可能会崩溃
【解决方案2】:

不,运算符是使用全局函数重载的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多