这是Swift 3编译器中的错误吗?这不是模棱两可的,而是==两个String.
它说:
error: ambiguous reference to member '=='
let strs = things.filter { return $0.id == "1" } .map { t in
^~
Run Code Online (Sandbox Code Playgroud)
对于此示例代码:
class Thing {
var id: String = ""
}
let things = [Thing]()
let x = 1
let strs = things.filter { return $0.id == "1" } .map { t in
if x == 1 {
return "a"
}
else {
return "b"
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个误导性的错误消息 - 模糊性实际上在于您传递给的闭包表达式map(_:),因为Swift无法在没有任何外部上下文的情况下推断出多行闭包的返回类型.
所以你可以使用三元条件运算符使闭包成一行:
let strs = things.filter { $0.id == "1"} .map { _ in
(x == 1) ? "a" : "b"
}
Run Code Online (Sandbox Code Playgroud)
或者只是为编译器提供一些关于map(_:)返回内容的显式类型信息:
let strs = things.filter { $0.id == "1"} .map { _ -> String in
Run Code Online (Sandbox Code Playgroud)
let strs : [String] = things.filter { $0.id == "1"} .map { _ in
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |