我如何实现Swift的Comparable协议?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何实现Swift的Comparable协议?相关的知识,希望对你有一定的参考价值。

如何在Swift中使用Comparable协议?在声明中它说我必须实现三个操作<,<=和> =。我把所有这些都放在课堂上,但它不起作用。我还需要拥有这三个吗?因为应该可以从一个推断出所有这些。

答案

Comparable协议扩展了Equatable协议 - >实现它们

Apple's Reference中是Apple的一个示例(在Comparable协议参考中),您可以看到如何执行此操作:不要将操作实现放在类中,而是放在外部/全局范围内。此外,您只需要实施<协议的Comparable运算符和==协议的Equatable

正确的例子:

class Person : Comparable {
    let name : String

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

func < (lhs: Person, rhs: Person) -> Bool {
    return lhs.name < rhs.name
}

func == (lhs: Person, rhs: Person) -> Bool {
    return lhs.name == rhs.name
}

let paul = Person(name: "Paul")
let otherPaul = Person(name: "Paul")
let ben = Person(name: "Ben")

paul > otherPaul  // false
paul <= ben       // false
paul == otherPaul // true
另一答案

更新Swift 3 for Kametrixom的回答

class Person : Comparable {
let name : String

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


static func < (lhs: Person, rhs: Person) -> Bool {
    return lhs.name < rhs.name
}

static func == (lhs: Person, rhs: Person) -> Bool {
    return lhs.name == rhs.name
}

}

//然后从其他地方打电话

let paul = Person(name: "Paul")
let otherPaul = Person(name: "Paul")
let ben = Person(name: "Ben")

print(paul > otherPaul)  // false
print(paul <= ben)       // false
print(paul == otherPaul) // true

以上是关于我如何实现Swift的Comparable协议?的主要内容,如果未能解决你的问题,请参考以下文章

Swift的Equatable和Comparable的使用

如何理解 Java 中的 lt;T extends Comparable<

如何在符合 Swift 协议的同时确定要实现哪些成员

OpenCV IOS Swift 2:如何实现CvVideoCameraDelegate协议处理视频帧

如何使用 Swift 协议功能,如 Android 接口监听器实现?

如何在 Swift 中覆盖协议扩展的计算属性