Frage Wie implementiere ich Swifts vergleichbares Protokoll?


Wie verwende ich das vergleichbare Protokoll in Swift? In der Deklaration heißt es, ich müsste die drei Operationen <, <= und> = implementieren. Ich lege alle in die Klasse, aber es funktioniert nicht. Muss ich auch alle drei haben? Weil es möglich sein sollte, alle von einem einzigen abzuleiten.


29
2018-06-20 19:54


Ursprung


Antworten:


Das Comparable-Protokoll erweitert das Equatable-Protokoll -> implementieren Sie beide

Im Apples Referenz ist ein Beispiel von Apple (innerhalb der Comparable-Protokoll-Referenz) können Sie sehen, wie Sie es tun sollten: Legen Sie die Operation Implementierungen nicht innerhalb der Klasse, sondern auf der äußeren / globalen Bereich. Auch Sie müssen nur das implementieren < Betreiber von Comparable Protokoll und == von Equatable Protokoll.

Korrektes Beispiel:

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

53
2018-06-20 21:18



Aktualisierung für Schnell 3 für Kametrixom Antwort

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
}

}

// als Anruf von einem anderen Ort

  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

2
2017-07-15 13:11