Kam*_*xom 34 compare protocols swift
如何在Swift中使用Comparable协议?在声明中它说我必须实现三个操作<,<=和> =.我把所有这些都放在课堂上,但它不起作用.我还需要拥有这三个吗?因为应该可以从一个推断出所有这些.
Kam*_*xom 59
Comparable协议扩展了Equatable协议 - >实现它们
在Apple的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
Run Code Online (Sandbox Code Playgroud)
这是 Kametrixom 对Swift 3的回答的更新:
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
}
}
Run Code Online (Sandbox Code Playgroud)
Person然后可以将类的实例与关系运算符进行比较,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13939 次 |
| 最近记录: |