Как реализовать протокол Swift Comparable?

Как использовать протокол Comparable в Swift? В объявлении говорится, что мне придется реализовать три операции <, <= и > =. Я помещаю всех в класс, но он не работает. Также мне нужно иметь всех троих? Потому что должно быть возможно вывести все из них из одного.

Ответ 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