鉴于以下扩展......
extension Double {
typealias Triple = (Double, Double, Double)
static let pythagoreanTriple: Triple = (3, 4, 5)
}
...为什么Swift编译器会发出以下错误?
// Type of expression is ambiguous without more context
let a: Double = .pythagoreanTriple.0
// Type of expression is ambiguous without more context
func f(_ x: Double) {}
f(.pythagoreanTriple.0)
错误会以明确的Double.pythagoreanTriple.0
消失。
为什么编译器在这种情况下不推断Double
?
P.S。这只发生在元组中。
答案 0 :(得分:0)
您正在使用静态关键字,因此要使用静态变量,您必须使用范围名称,即您的案例中Double
的类,结构或扩展名。
答案 1 :(得分:0)
Slava Pestov在swift-users
邮件列表上回复:
我的理解是
.foo
语法仅在foo
是表达式出现的上下文类型的直接静态成员时才有效。