在Swift中为自定义类重载等价(==)运算符

Sou*_*ios 16 operator-overloading equivalence ios swift

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

Yoi*_*aya 30

添加全局功能.例如:

class CustomClass {
    var id = "my id"
}

func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return lhs == rhs
}
func !=(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return !(lhs == rhs)
}
Run Code Online (Sandbox Code Playgroud)

在Swift 2中使用Equatable协议

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

func ==(left: CustomClass, right: CustomClass) -> Bool {
    return left.id == right.id
}
Run Code Online (Sandbox Code Playgroud)

符合Swift 3中的Equatable协议

class CustomClass {
    var id = "my id"
}

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

  • 请注意,如果其中一个操作数是可选的,则不会触发上述运算符.另外,如果运算符的参数都是选项,并且两个操作数都是非选项,则不会被触发.使操作符的参数隐式地解包,以确保它将始终为您的自定义类触发; 但确保处理无案件,否则您的程序可能会崩溃 (3认同)

mip*_*adi 6

不,运算符使用全局函数重载.