这是一个Swift Playground,有两个版本的+
运算符:
protocol Value {
func get() -> Float
}
func + (a:Value, b:Value) -> Float {
print("Value.+")
return a.get() + b.get()
}
func + (a:S, b:Value) -> Float {
print("S.+")
return a.get() + b.get()
}
struct S : Value {
func get() -> Float {
return 0
}
}
struct T : Value {
func get() -> Float {
return 1
}
}
let s1 = S()
let s2 = S()
let s3 = s1 + s2
let t1 = T()
let t2 = T()
let t3 = t1 + t2
运行时,我得到以下输出:
S.+
Value.+
我是否认为swift编译器将S
解释为比Value
更具体的类型,这就是为什么它为第一个选择S.+
而不是Value.+
的原因和?这种行为是否在官方swift文档的某处确定了?