我有一系列PFObjects。我想搜索" Type"包含"寿司"。过滤器改变阵列。如何在不改变数组的情况下预先形成此搜索?
func startCheckOptions(objects: [AnyObject]) {
let filteredArray = objects.filter() {
if let type = ($0 as PFObject)["Type"] as String {
//if "type" contains "sushi", then do something instead of alter array
return type.rangeOfString("Sushi") != nil
} else {
return false
}
}
}
答案 0 :(得分:2)
您可以使用contains函数:
func startCheckOptions(objects: [AnyObject]) -> Bool {
return contains(objects as [PFObject]) { (object) -> Bool in
if let type = object["Type"] as? String {
return type.rangeOfString("Sushi") != nil
}
else {
return false
}
}
}
if startCheckOptions(objects) {
println("yes")
}
else {
println("no")
}
这样做的好处是不构建包含匹配对象的新数组,并在第一次匹配时停止。
在这种情况下,最好通过尽快将其投射到[PFObject]
来保护所投射的对象(或者在其他地方真正处理一次)。让AnyObject
引用浮动只会导致混乱和心痛。
答案 1 :(得分:0)
filter()
不会更改数组,但会返回一个新数组。你上面的内容是正确的。 objects
将是原始数组,filteredArray
将是新对象的一致对象,其中" type"是"寿司"。