我試圖與協議混合泛型和我得到一個很艱難的時期的xD使用作爲具體類型符合其他協議不受支持
我已經在Android/Java的某些架構實現了一些協議項目,我試圖重寫它,以適應它在一個快速/ iOS項目。但是我發現這個限制。
ProtocolA
protocol ProtocolA {
}
ProtocolB
protocol ProtocolB : ProtocolA {
}
ImplementProtocolA
class ImplementProtocolA <P : ProtocolA> {
let currentProtocol : P
init(currentProtocol : P) {
self.currentProtocol = currentProtocol
}
}
ImplementProtocolB
class ImplementProtocolB : ImplementProtocolA<ProtocolB> {
}
所以,當我嘗試設置ProtocolB作爲實現ProtocolA的具體類型,我得到這個錯誤:
使用 'ProtocolB' 作爲具體類型符合的協議'ProtocolA'不支持
1是否有任何理由對此「限制」?
2是否有任何解決方法來實現它?
3它在某些時候會被支持嗎?
--UPDATED--
同樣的問題的另一個變種,我想:
查看協議
protocol View {
}
protocol GetUserView : View {
func showProgress()
func hideProgress()
func showError(message:String)
func showUser(userDemo:UserDemo)
}
演示協議
protocol Presenter {
typealias V : View
}
class UserDemoPresenter : Presenter {
typealias V = GetUserView
}
錯誤:
UserDemoPresenter.swift Possibly intended match 'V' (aka 'GetUserView') does not conform to 'View’
那是什麼?它符合!
即使我使用View而不是GetUserView,它也不會編譯。
class UserDemoPresenter : Presenter {
typealias V = View
}
UserDemoPresenter.swift Possibly intended match 'V' (aka 'View') does not conform to 'View'
xxDD我不明白這一點,真的。
--UPDATED--
由羅布·納皮爾提出瞭解決問題是不固定的,相反,它只是推遲。
當試圖定義到UserDemoPresenter一個參考,我需要指定泛型類型,所以我得到了同樣的錯誤:
private var presenter : UserDemoPresenter<GetUserView>
Using 'GetUserView' as a concrete type conforming to protocol 'GetUserView' is not supported
此處還觀察到:http:// stackoverflow。COM /問題/ 33112559 /協議犯規,符合到自身。 –