我在swift 3中有一个[string:string]数组,我想在此数组中找到一个特定的项目,具体取决于键是否包含字符串值。
let result = collection.first(where: ((key, value) -> Bool in
return key.contains("mystring")))
但是,Xcode一直告诉我,这是"表达式列表中的预期表达"。我现在用谷歌搜索了一个小时,每个使用此关闭的网站都以包含或过滤方式的方式似乎是正确的语法。
我在这里缺少什么?
您实际上还没有闭合,因为您使用了( )
而不是{ }
此外,first(where:)
的关闭具有(Dictionary<Key, Value>.Iterator.Element) throws -> Bool
类型。参数是一个元组,是迭代的(Key, Value)
对。
尝试一下:
let result = collection.first(where: { pair -> Bool in
return pair.key.contains("mystring")
})
但是您可以进行一些简化:
- 可以推断
Bool
返回类型。 - 在单个表达式关闭中不需要
return
关键字。 -
pair
参数名称是任意的,而毫无意义,因此最好只使用隐式闭合参数。 - 可以使用Trailling闭合语法。
这些更改后,一切都简化为:
let result = collection.first{ $0.key.contains("mystring") }