在 Swift 中查找而不是过滤数组

Find instead of Filter Array in Swift

我有一个 PFObject 数组。我想搜索 "Type" 是否包含 "Sushi"。过滤器改变数组。如何在不更改数组的情况下执行此搜索?

func startCheckOptions(objects: [AnyObject]) {     
  let filteredArray = objects.filter() {
      if let type = ([=11=] as PFObject)["Type"] as String {
          //if "type" contains "sushi", then do something instead of alter array
          return type.rangeOfString("Sushi") != nil
      } else {
          return false
      }
  }
}

filter() 不会改变数组,但它 returns 是一个新数组。你上面的是正确的。 objects 将是原始数组,filteredArray 将是 "type" 是 "sushi".

的对象一致的新数组

您可以使用包含函数:

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 参考文献四处飘荡只会导致混乱和心痛。