使用Array as Any对象:
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数组很简单,但这是任何数组! 如何检查ele1,ele2是否存在?
答案 0 :(得分: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 })
}
}
答案 1 :(得分:0)
我想你可以尝试这样的事情:
a.forEach({
if let testInt: Int = $0 as? Int, ele1 == testInt {
print("found")
}
})
与任何其他类型相似。我离开了我的电脑,因此无法对上述内容进行测试,但我认为它应该可行。