這是我在StackOverflow上的第一個問題,所以請對我輕鬆點。Swift Type Inference Not Working(Xcode 7.1.1)
我一直在努力讓Swift調用適當的泛型重載。
假設我有以下協議 -
protocol MyProtocol { }
而且我有以下的通用方法 -
func foo<T>() -> T
func foo<T: MyProtocol>() -> T
人們預計,隨着T
符合MyProtocol
返回類型調用foo()
將調用適當的過載。
let bar: MyProtocol = foo()
上面的代碼實際上在運行期間調用下面的函數和Cmd的+點擊IDE導航到錯誤的過載,以及。
func foo<T>() -> T
出於某種原因,我不能得到這個在Xcode 7.1.1正常工作。
我是否錯過了一些完全基礎的東西,或者這是另一個Swift怪癖?
編輯
添加的這種行爲在行動按馬特的請求的示例。
protocol MyProtocol { }
class MyProtoClass : MyProtocol { }
class Bar {
func foo<T>(value: T) {
print("T is Generic")
}
func foo(value: MyProtocol) {
print("T conforms to MyProtocol")
}
}
class MyClass<T> {
var value: T
init(value: T) { self.value = value }
var b = Bar()
func print() {
b.foo(value)
}
}
MyClass<MyProtocol>(value: MyProtoClass()).print()
MyClass<String>(value: "").print()
將上面的代碼複製並粘貼到Swift命令行應用程序中,並執行以下輸出。
T is Generic
T is Generic
請問您能否顯示用於測試的實際代碼?一個好的SO問題應該包含複製,粘貼和運行在自己機器上的一切。 – matt
謝謝你的建議,亞光。我已經添加了代碼來重現此行爲。 – Randy
非常酷,謝謝你這樣做。 – matt