XCode 8 无法编译 Swift 3 可用于 Xcode 9 的代码

XCode 8 failing to compile Swift 3 code that works on Xcode 9

有问题的代码有点来自这个answer,并检查给定的索引是否可用。

具体来说,只有在 XCode 8.3 中才会出现以下问题 who up(代码在 XCode 9 beta 中编译良好。这段代码也很明确Swift 3,而不是 4)。

我调查了与 "missing argument" 错误相关的问题,典型的回应是确保包含可选参数。但是,这里所有3个都包含optional i,即Index.

类型

我这里的语法哪里做错了?

语法更改为:

public func contains(where predicate: (Element) throws -> Bool) rethrows -> Bool

现在你应该使用这个

self.indices.contains(where: { (object) -> Bool in
     //make comparison here
})

self.indices.contains(where: {[=12=] == "equal to something"})

或者你可以这样使用:

if self.indices.first(where: {[=13=] == "equal something"}) != nil {
    return self[i]
}else{
    return nil
}

顺便说一句,集合在调用 "contains" 后仍然有一个布尔值返回。 Check this