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