如何实现Swift 3 Dictionary(其中:)封闭

WJM*_*WJM 2 dictionary filter swift3

我在Swift 3中有一个[String:String]数组,我想在这个数组中找到一个特定的项目,具体取决于Key是否包含String值.

                let result = collection.first(where: ((key, value) -> Bool in
                    return key.contains("mystring")))
Run Code Online (Sandbox Code Playgroud)

然而Xcode一直告诉我它是'表达式列表中的预期表达式'.我现在用Google搜索了一个小时,并且以包含或过滤方式使用此闭包的每个网站似乎都是正确的语法.

我在这里错过了什么?

Ale*_*ica 5

你实际上没有关闭,因为你使用( )而不是{ }

此外,封闭为first(where:)类型(Dictionary<Key, Value>.Iterator.Element) throws -> Bool.参数是单个元组,它是(Key, Value)迭代对.

试试这个,相反:

let result = collection.first(where: { pair -> Bool in
    return pair.key.contains("mystring")
})
Run Code Online (Sandbox Code Playgroud)

但是您可以进行一些简化:

  1. Bool返回类型可以推断.
  2. return单个表达式闭包中不需要该关键字.
  3. pair参数名称是任意的,没有什么意义,所以最好只使用隐式闭合参数.
  4. 可以使用Trailling闭包语法.

在这些更改之后,这一切都简化为:

let result = collection.first{ $0.key.contains("mystring") }
Run Code Online (Sandbox Code Playgroud)