2017-02-24 7 views
0

Ich frage mich, warum nicht folgende Arbeiten:prüfen whethere ein Array-Element enthalten

var tmp = [AnyObject]() 
for (key, value) in dictionary{ 

     if (tmp.contains(value)){ 

     } 
     tmp.append(value as AnyObject) 
    } 

Sehen Sie wie es keine Methode ist für ein Array .contain. es zwingt mich, eine andere Methode zu verwenden tmp.contains(where: <#T##(AnyObject) throws -> Bool#>)

Aber ich will nicht. Ich möchte nur überprüfen, ob ein Array dieses spezifische Objekt enthält!

+0

Wie ist das Wörterbuch definiert? Welche Art von Werten enthält es? Müssen Sie 'AnyObject' verwenden? –

+0

@MartinR Funktion definiert als func isInvertible (inDict-Wörterbuch: [String: Int]) -> Bool, daher enthält das Wörterbuch Int als Wert. –

+0

Dann wäre die einfachste Lösung, das Array als 'var tmp = [Int]()' –

Antwort

1

Ich empfehle von AnyObject zu AnyHashable (natürlich, wenn das möglich ist) schalten, weil AnyHashableist Equatable. Ihr Code würde so aussehen:

var tmp = [AnyHashable]() 
var dictionary: [Int: Any] = [1: "Hello1", 2: "Hello2", 3: "Hello3", 4: false, 5: 289 ] 
for (key, value) in dictionary{ 
    if tmp.contains(value as! AnyHashable){ 
     continue 
    } 
    tmp.append(value as! AnyHashable) 
} 

Ich hoffe, es hilft!

1

Das liegt daran, dass AnyObject kein Equatable-Objekt ist. Wenn Sie ein AnyObject-Array haben, müssen Sie die Vergleiche selbst durchführen. Wenn Sie ein Array von Strings oder eine benutzerdefinierte Klasse zum Beispiel verwendet werden, könnten Sie this enthält() -Methode der Sequenz verwenden

Verwandte Themen