2017-10-16 9 views
0

J'ai un tableau de type tuple (Date, MyOwnClass) et essaie de trouver l'index d'un tuple spécifique qui est égal à mon tuple cible du tableau tuple. XCode me donne une erreur en disant "Opérateur binaire == ne peut pas ..." quand j'ai essayé d'utiliser ".indexOf ({$ 0 == targetTuple})"(Swift) Comment obtenir l'index d'un élément de tuple (Date, MyClass) à partir d'un tableau de tuple [(Date, MyClass)]?

Merci d'avance!

+0

S'il vous plaît fournir un [mcve] –

Répondre

0

Tuples conforme automatiquement au protocole assimilables si tous ses éléments sont également conformes, donc il vous suffit de vous assurer que votre classe implémente le protocole assimilables:

class MyClass { 
    var name : String 
    init(_ _name : String) { 
    name = _name 
    } 
} 

extension MyClass: Equatable { 
    public static func ==(lhs: MyClass, rhs: MyClass) -> Bool { 
    return lhs.name == rhs.name 
    } 
} 

let ar : [(Int, MyClass)] = [ 
    (1, MyClass("A")), 
    (2, MyClass("B")), 
    (1, MyClass("A")) 
] 

if let ix = ar.index(where:{$0 == (1, MyClass("A"))}) { 
    print(ix) 
} else { 
    print("not found") 
} 

// 0 is printed 
+0

Correction mineure: Il sont les opérateurs '==' pour les tuples d'éléments équitables, mais les tuples ne sont pas conformes au protocole 'Equatable'. –

+0

Merci beaucoup pour votre réponse. Puisque le protocole, Equitable, est une chose nouvelle pour moi, j'ai des questions sur quand l'utiliser et pourquoi j'en ai besoin pour mon tuple. Merci!! –