检查我的数组是否包含字典

时间:2016-05-20 22:46:39

标签: arrays swift

我有一个包含字符串,数组和字典混合的数组。我想检查它是否包含字典。我正在尝试以下方法,但收到错误:

if array.contains(Dictionary<String, AnyObject>) {

 }

我将如何做到这一点?

3 个答案:

答案 0 :(得分:4)

如果您不希望重载contains方法,则不必费心 - 已经有version of it that can take a custom predicate检查每个元素以确定是否应将其视为'在数组'。

filter不同,它具有在找到匹配后立即返回的优势。如果你真的想要的话,你仍然可以把它变成一种扩展方法 - 但在我看来,你不应该这么简洁。

if array.contains({$0 is [String:AnyObject]}) {
    print("contains dictionary")
} else {
    print("doesn't contain dictionary")
}

答案 1 :(得分:3)

@Ryan,该类型不必符合Equatable协议。

这将完成工作:

extension Array {

    // This is a concise, yet inefficient implementation
    func contains<T>(type type : T.Type) -> Bool {
        return !filter({ $0 is T }).isEmpty
    }

    // Here is a more efficient implementation
    func contains<T>(type type : T.Type) -> Bool {
        var contains = false
        for element in self {
            if element is T {
                contains = true
                break
            }
        }
        return contains
    }
}

可以这样使用:

if array.contains(type: Dictionary<String, AnyObject>.self) {
    // Run code if the array holds a dictionary of the given type
}

答案 2 :(得分:0)

这要求数组元素符合Equatable协议(Dictionary不会)。

您必须使用以下内容扩展contains:

extension Array {
    func contains<T where T : Equatable>(obj: T) -> Bool {
        return self.filter({$0 as? T == obj}).count > 0
    }
}