compare protocols swift

compare - ¿Cómo implemento el protocolo Comparable de Swift?



protocols (2)

Actualizacion para Swift 3 para Kametrixom respuesta

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 } }

// entonces llama desde otro lugar

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

¿Cómo uso el protocolo Comparable en Swift? En la declaración dice que tendría que implementar las tres operaciones <, <= y> =. Puse todos esos en la clase pero no funciona. ¿También necesito tener los tres? Porque debería ser posible deducirlas todas de una sola.


El protocolo Comparable extiende el protocolo Equatable -> implementa ambos

En la Referencia de Apple es un ejemplo de Apple (dentro de la referencia del protocolo Comparable) puede ver cómo debe hacerlo: No coloque las implementaciones de operaciones dentro de la clase, sino en el ámbito externo / global. También solo tiene que implementar el operador < del protocolo Comparable y == del protocolo Equatable .

Ejemplo correcto:

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