在Swift中查找而不是Filter Array

时间:2015-01-05 22:47:11

标签: objective-c arrays search swift

我有一系列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
      }
  }
}

2 个答案:

答案 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"是"寿司"。