将数组作为任何对象:

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(_:)方法。您也不能使用==来比较Anys。
但是,[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/

10-14 23:16