检查Swift中是否存在Array作为Any存在的元素

时间:2017-09-15 06:38:45

标签: swift

使用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是否存在?

2 个答案:

答案 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")
    }
})

与任何其他类型相似。我离开了我的电脑,因此无法对上述内容进行测试,但我认为它应该可行。