Как использовать протокол Comparable в Swift? В объявлении говорится, что мне придется реализовать три операции <, <= и > =. Я помещаю всех в класс, но он не работает. Также мне нужно иметь всех троих? Потому что должно быть возможно вывести все из них из одного.
Как реализовать протокол Swift Comparable?
Ответ 1
Протокол Comparable расширяет Equatable protocol → реализует оба из них
В Справочник Apple - пример из Apple (в ссылке на Сопоставимый протокол) вы можете увидеть, как вы должны это делать: Не помещайте реализации операции в пределах класса, а скорее на внешний/глобальный охват. Также вам нужно реализовать оператор <
из протокола 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
Ответ 2
Обновление для Swift 3 для ответа 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