2017-09-15 74 views
0

存在任何元件以与阵列作为任何对象:如果a是字符串/ int数组,但这是任何数组检查阵列中夫特

var a : [Any] = [] 
let x : String = "This is X" 
let y : Int = 9 
let z : [Any] = ["1", "no. 2"] 

a.append(x) 
a.append(y) 
a.append(z) 

let ele1 = 9 
let ele2 = "This is test string" 

很简单! 如何检查ele1,ele2是否存在或不在?

回答

3

由于Any不符合Equatable[Any]没有contains(_:)方法。您不能使用==来比较Any

但是,[Any]确实有一个contains(where:)接受谓词的方法。您可以传递(Any) -> Bool,如果数组中有任何东西使封闭返回true,则contains返回true。

我们可以使用contains(where:)来做你想要的。例如,如果你想检查ele2:

a.contains(where: { ($0 as? String) == ele2 }) 

我所做的是我铸造的元素串,然后再使用==

你也可以创建一个具有此扩展名:

extension Array where Element == Any { 
    func contains<T: Equatable>(_ element: T) -> Bool { 
     return contains(where: { ($0 as? T) == element }) 
    } 
} 
+0

OK,完成。谢谢 –

0

我想你可以尝试这样的事:

a.forEach({ 
    if let testInt: Int = $0 as? Int, ele1 == testInt { 
     print("found") 
    } 
}) 

和任何其他类型的相似。我远离我的电脑,所以没有测试过上述内容,但我认为它应该可以工作。