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
有问题的代码有点来自这个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