将数组作为任何对象:
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"
如果a是String/Int数组非常简单,但这是任何数组!
如何检查EEL1、ELE2是否存在?
最佳答案
由于Any
不符合Equatable
,[Any]
没有contains(_:)
方法。您也不能使用==
来比较Any
s。
但是,[Any]
有一个接受谓词的contains(where:)
方法。您可以传入一个(Any) -> Bool
,如果数组中有任何东西使闭包返回true,contains
返回true。
我们可以使用contains(where:)
来做您想要的事情。例如,如果要检查ele2:
a.contains(where: { ($0 as? String) == ele2 })
我所做的是先将元素转换为string,然后使用
==
。您还可以创建一个扩展来执行以下操作:
extension Array where Element == Any {
func contains<T: Equatable>(_ element: T) -> Bool {
return contains(where: { ($0 as? T) == element })
}
}
关于swift - 在Swift中检查Array as Any是否存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46233221/