2017-09-15 67 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") 
    } 
}) 

和任何其他類型的相似。我遠離我的電腦,所以沒有測試過上述內容,但我認爲它應該可以工作。