数组中的Swift last(:where)元素

时间:2018-09-03 00:28:15

标签: swift

对于数组:

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?'的值

为什么?

2 个答案:

答案 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)
    }
}