如何从通用数组中搜索特定元素,例如swift中的[AnyObject]?

时间:2016-07-07 06:41:03

标签: ios swift

我需要在swift中搜索GENERIC数组是否包含特定元素。

    var arrProducts = [AnyObject]()

    arrProducts.append(Article())
    arrProducts.append(Flower())
    arrProducts.append(Chocolate())

此处的产品可以是我在此数组中添加的任何自定义对象。

现在我想检查arrProducts是否包含3个自定义类对象

2 个答案:

答案 0 :(得分:0)

这将检查"如果arrProducts包含3个自定义类对象中的任何一个"。

let isContainingAnyOf3CustomClassObject =
    arrProducts.contains {$0 is Article || $0 is Flower || $0 is Chocolate}
//->true

如果您需要检索任何3种类型的所有元素,可以使用filter

let elementsOfAny3Types = arrProducts.filter {$0 is Article || $0 is Flower || $0 is Chocolate}

如果您想要第一个元素,可以使用first

let firstElementOfAny3Types = arrProducts.filter {$0 is Article || $0 is Flower || $0 is Chocolate}.first

但这可能更有效:

if let firstMatchingIndex = arrProducts.indexOf({$0 is Article || $0 is Flower || $0 is Chocolate}) {
    let firstMatchingElement = arrProducts[firstMatchingIndex]
    print(firstMatchingElement)
}

如果上述任何内容不符合您的意思,您需要修改您的问题,并更准确地描述您真正希望实现的目标。

答案 1 :(得分:0)

搜索特定类对象的另一种方法是flatMap。这个apporach的好处是你得到一个正确类型的数组。

你有这个

class Article { }
class Flower { }
class Chocolate { }

let products : [AnyObject] = [Article(), Flower(), Chocolate()]

让我们摘花

let flowers = products.flatMap { $0 as? Flower }

flowers数组具有以下类型[Flower]并且仅包含正确的对象。