我有以下相當簡單雨燕2.0的代碼斯威夫特協議如何才能符合類型參數協議
protocol PA {
init(handle:Int)
}
class CB: PA {
required init(handle:Int) {}
}
class X {
func test<U:PA>() -> U {
return U(handle: 1)
}
}
class ThisFails {
func foo() -> PA {
return X().test()
}
}
但它失敗,很奇怪的錯誤消息編譯
swift:23:20: error: generic parameter 'U' could not be inferred return X().test()
我想ü推斷爲PA類型
將方法foo
的返回類型更改爲CB
使其正常工作,但我有許多類實現PA協議,因此不會爲我工作。
類似地從U刪除PA約束:PA和編譯器推斷它在foo
內部爲PA類型,但是我需要在test
內部調用約束,這樣也不會幫助我。
這是'正常'。測試() - > U是帶有返回U類型實例的U類型參數的函數.foo返回類型是PA.Type,不是符合PA的類型,如U:PA。換句話說,從protocol.Type創建一個實例是不可能的。嘗試讓a = Any()。它也不可用。 –
user3441734