对成员'=='的快速模糊引用

Rob*_*b N 6 swift swift3

这是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)

Ham*_*ish 9

这是一个误导性的错误消息 - 模糊性实际上在于您传递给的闭包表达式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)