静态元组的表达式类型不明确

时间:2017-09-01 10:15:37

标签: swift

鉴于以下扩展......

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。这只发生在元组中。

2 个答案:

答案 0 :(得分:0)

您正在使用静态关键字,因此要使用静态变量,您必须使用范围名称,即您的案例中Double的类,结构或扩展名。

答案 1 :(得分:0)

来自Apple的 Swift核心团队

Slava Pestovswift-users邮件列表上回复:

  

我的理解是.foo语法仅在foo是表达式出现的上下文类型的直接静态成员时才有效。