Ne peut pas invoquer 'indexOf" avec une liste d'arguments de type '(ChecklistItem)'
Quand je suis à l'écriture de code pour trouver un élément de la matrice avec l'utilisation de indexOf il me montre le ci-dessus a déclaré erreur.
Voici mon code:-
func addItemViewController(controller: AddItemViewController, didFinishEditingItem item: ChecklistItem)
{
if let index = items.indexOf(item)
{
let indexPath = NSIndexPath(forRow: index, inSection: 0)
if let cell = tableView.cellForRowAtIndexPath(indexPath)
{
configureTextForCell(cell, withChecklistItem: item)
}
}
- ce serait bien si vous pouvez mettre la citation de ce code, qui, je crois, c'est le chapitre 2 du livre iOS apprenti
Vous devez vous connecter pour publier un commentaire.
Afin d'utiliser
indexOf
laChecklistItem
doit adopter Equatable protocole. Que par l'adoption de ce protocole, la liste peut comparer un élément avec d'autres éléments pour trouver le désiré indiceindexOf
ne peut être appliqué que pour les Collections deEquatable
types, vosChecklistItem
n'est pas conforme àEquatable
protocole (avoir une==
opérateur).Pour être en mesure d'utiliser
indexOf
ajouter ceci au fichier contenantChecklistItem
classe dans l'étendue globale :Veuillez noter qu'il va faire de comparaison, en comparant les instances adresses dans la mémoire. Vous voudrez peut-être vérifier l'égalité en comparant les membres de la classe à la place.
Equatable
en l'ajoutant à la définition de la classe.Dans Swift 4 et Swift 3, mise à jour de votre Modèle de Données pour se conformer à "Equatable" protocole, et de mettre en œuvre la lhs=rhs méthode , alors seulement vous pouvez utiliser ".index(de:...)", parce que vous comparez votre objet personnalisé
Utilisation:
Je me rends compte que cette question a déjà accepté de répondre, mais j'ai trouvé un autre cas qui provoquent cette erreur donc ça peut aider quelqu'un d'autre. Je suis en utilisant Swift 3.
Si vous créez une collection et permettre le type inféré vous pouvez également voir cette erreur.
Exemple:
La raison possible est que vous ne dites pas la ChecklistItem type qu'il est equatable, peut-être que vous avez oublié de mentionner ChecklistItem classe est héritée de NSObject.
NSObject adopte ou est conforme à la equatable protocole