是否有可能重载协议函数并在直接处理协议类型时调用正确的定义?Swift协议功能重载
下面是一些代码来说明问题
protocol SomeProtocol {
func doSomething<T>(obj: T)
}
class SomeClass : SomeProtocol {
func doSomething<T>(obj: T) {
print("Generic Method")
}
func doSomething(obj: String) {
print(obj)
}
}
let testClass = SomeClass()
testClass.doSomething("I will use the string specific method")
(testClass as SomeProtocol).doSomething("But I will use the generic method")
编辑:为了澄清,代码工作。我想知道为什么这两个调用不使用特定于字符串的方法。
双编辑:删除一个简单的例子
这是一个错误,电流限制,或预期的功能中介派遣类?如果这是有意的,有人可以解释为什么吗?
雨燕2.0的Xcode 7.0
回答
不能超载协议功能,并期望正确的定义被调用。这是因为要调用的定义是在编译时挑选的。由于编译器不知道具体类型,因此它选择编译时已知的唯一定义,即doSomething<T>
。
我在操场RUND这个代码,它工作得很好:*我会用具体方法\ n一般方法* – vikingosegundo
该代码有效。我很困惑为什么这两个调用不使用特定的方法。 – eunoia
这两种方法都使用 – vikingosegundo