swift获取特定类型对象的最佳方法是什么。 e.g
protocol Fruit {
func setColor()
}
class Orange:NSObject, Fruit {
func setColor() {
}
}
class Apple:NSObject, Fruit {
func setColor() {
}
}
class MyClass {
var fruits:[Fruit]? // get from data base
//here how to get fruits only of type Orange. i.e. Array of oranges
}
这里有一种方法是我可以放入“for in”循环并检查每个对象的类型,然后可以将它添加到新数组中。
但还有其他任何可行的方法吗?
编辑:
以下对我有用。还有其他办法吗?
var oranges: [Orange] = []
for orange in fruits {
if let myOrange = orange as? Orange {
oranges.append(myOrange)
}
}
答案 0 :(得分:2)
如果您只想在for
循环中迭代这些,只需添加where
子句:
for fruit in fruits where fruit is Orange {
}
如果您希望存储过滤后的数组(仍为[Fruit]
类型)以供将来使用,请使用filter
:
let oranges = fruits.filter{ $0 is Orange }
如果您希望存储filtere数组(类型为[Orange]
)以供将来使用,请使用用户flatMap
:
let oranges = fruits.flatMap{ $0 as? Orange }