了解如何在swift中选择不明确的运算符

时间:2017-12-23 06:05:24

标签: swift protocols overloading

这是一个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文档的某处确定了?

0 个答案:

没有答案