sto cercando di mescolare farmaci generici con i protocolli e sto ottenendo un xD momento davvero difficileUtilizzando un protocollo come un tipo concreto conforme ad un altro protocollo non è supportato
Ho certa architettura implementata in Android/Java progetto, e sto cercando di riscriverlo per adattarlo a un progetto rapido/iOS. Ma ho trovato questa limitazione.
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> {
}
Così, quando si tenta di impostare ProtocolB come il tipo di cemento che implementa ProtocolA, ottengo questo errore:
Usando 'ProtocolB' come un tipo calcestruzzo conforme al protocollo "Protocollo" non è supportato
1 C'è qualche motivo per questa "limitazione"?
2 Esiste qualche soluzione alternativa per ottenere questo risultato?
3 Sarà supportato a un certo punto?
--UPDATED--
Un'altra variante dello stesso problema, penso:
View protocolli
protocol View {
}
protocol GetUserView : View {
func showProgress()
func hideProgress()
func showError(message:String)
func showUser(userDemo:UserDemo)
}
protocolli Presenter
protocol Presenter {
typealias V : View
}
class UserDemoPresenter : Presenter {
typealias V = GetUserView
}
Errore:
UserDemoPresenter.swift Possibly intended match 'V' (aka 'GetUserView') does not conform to 'View’
Che cosa è questo ?? È conforme!
Anche se utilizzo View anziché GetUserView, non viene compilato.
class UserDemoPresenter : Presenter {
typealias V = View
}
UserDemoPresenter.swift Possibly intended match 'V' (aka 'View') does not conform to 'View'
xxDD Non capisco, davvero.
--UPDATED--
Con la soluzione proposta da Rob Napier il problema non viene risolto, invece, è solo ritardato.
Quando una prova per definire un riferimento UserDemoPresenter, devo specificare il tipo generico, in modo da ottenere lo stesso errore:
private var presenter : UserDemoPresenter<GetUserView>
Using 'GetUserView' as a concrete type conforming to protocol 'GetUserView' is not supported
Anche qui osservato: http: // stackoverflow.com/domande/33112559/protocollo-doesnt-conforme a se stessa. –