Swift:可以像lambdas一样使用闭包来查找数组中的对象吗?

时间:2016-03-03 05:52:53

标签: c# swift lambda closures

我正在使用swift,我有一个数组,我想使用其中一个属性的值来搜索对象。

在C#中我会使用lambda来查找我的对象: return myArray.FirstOrDefault(obj -> obj.Name == "Foo");

我听说swift使用闭包而不是lambdas,所以有没有类似的方法在使用闭包的swift中完成这个单行任务?

我已经检查了苹果关于Closures here的文档,但似乎一切都需要编写一个单独的函数。感觉好像有一种简单的方法可以在swift中做到这一点我还没有找到。

1 个答案:

答案 0 :(得分:5)

Swift有一个名为indexOf的Array方法,它将返回给定闭包的匹配元素的第一个索引。要返回实际元素,您需要执行类似的操作。返回是可选的,因为可能没有匹配,所以你必须自己处理。

let element = array.filter{ $0.name == "Foo" }.first

enter image description here

也许我们可以重载数组,以便有first的版本采用闭包而不是void。

extension Array {
  func first(includes: (Element) -> Bool) -> Element? {
    return self.filter{ includes($0) }.first
  }
}

enter image description here