Per spiegare veramente quello che sta succedendo lì, prima dobbiamo capire che ci sono due metodi su contains
Array
(o per meglio dire, il SequenceType).
func contains(_ element: Self.Generator.Element) -> Bool
con vincoli
Generator.Element : Equatable
e
func contains(@noescape _ predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Bool
La prima cerca fondamentalmente per un dato elemento dell'array utilizzando ==
. Il secondo utilizza una chiusura che restituisce uno Bool
per cercare elementi.
Il primo metodo non può essere utilizzato perché Dog
non adotta Equatable
. Il compilatore tenta di utilizzare il secondo metodo, ma quello ha una chiusura come parametro, quindi l'errore che si sta vedendo.
Soluzione: attuare Equatable
per Dog
.
Se siete alla ricerca per il confronto oggetto di riferimento, è possibile utilizzare una semplice chiusura:
let result = dogs.contains({ $0 === sparky })
non funziona affatto –