对于数组:
var arr = [3,2,1,2,1,4,5,8,6,7,4,2]
我可以找到第一个匹配元素
arr.first(where: {$0 == 2})!
但最后一个
arr.last(where: {$0 == 2})
返回:
无法调用非函数类型'Int?'的值
为什么?
答案 0 :(得分:2)
last(where:)
是在Swift 4.2(Xcode 10)中添加的。
如果您需要使用Swift 4.1或更早版本查找最后一个匹配项,可以执行以下操作:
let last = arr.reversed().first { $0 == 2 }
答案 1 :(得分:1)
如rmaddy所提到的,该方法仍处于测试阶段。如果您也想将此功能添加到Swift 4.1,则可以如下扩展BidirectionalCollection
:
extension BidirectionalCollection {
func last(where predicate: (Element) throws -> Bool) rethrows -> Element? {
return try reversed().first(where: predicate)
}
}