2017-02-24 157 views
0

我不知道爲什麼以下不工作:檢查whethere數組包含元素

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

     if (tmp.contains(value)){ 

     } 
     tmp.append(value as AnyObject) 
    } 

看起來像沒有.contain一個陣列的方法。它強迫我用一些其他的方法tmp.contains(where: <#T##(AnyObject) throws -> Bool#>)

,但我不想給。我只是想檢查一個數組是否包含該特定對象!

+0

字典是如何定義的?它包含什麼樣的值?你必須使用AnyObject嗎? –

+0

@MartinR函數定義爲func isInvertible(inDict dictionary:[String:Int]) - > Bool,因此dictionary包含Int作爲值。 –

+0

那麼最簡單的解決辦法是定義數組爲'無功TMP = [INT]()' –

回答

1

()方法,我建議切換從AnyObjectAnyHashable(當然,如果可能的話),因爲AnyHashableEquatable。你的代碼看起來像這樣:

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) 
} 

希望它有幫助!

1

這是因爲AnyObject不是一個Equatable對象。如果你有一個AnyObject數組,你必須自己進行比較。如果您使用的字符串數組或自定義類,例如,你可以使用this包含序列