2017-02-24 129 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包含序列