我需要在swift中搜索GENERIC数组是否包含特定元素。
var arrProducts = [AnyObject]()
arrProducts.append(Article())
arrProducts.append(Flower())
arrProducts.append(Chocolate())
此处的产品可以是我在此数组中添加的任何自定义对象。
现在我想检查arrProducts是否包含3个自定义类对象
答案 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]
并且仅包含正确的对象。