Я пытаюсь смешивать генераторы с протоколами, а Im получает очень тяжелое время xD
У меня есть определенная архитектура, реализованная в проекте Android/Java, и я пытаюсь переписать ее, чтобы соответствовать ей в проекте swift/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 Будет ли она поддерживаться в какой-то момент?
- ОБНОВЛЕНО -
Другой вариант той же проблемы, я думаю:
Просмотр протоколов
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 Возможно, это соответствует 'V' (aka "GetUserView" ) не соответствует "View
Что это? Он соответствует!
Даже если я использую View вместо GetUserView, он не компилируется.
class UserDemoPresenter : Presenter {
typealias V = View
}
UserDemoPresenter.swift Возможное соответствие 'V' (aka 'View') не соответствует "View"
xxDD Я действительно не понимаю.
- ОБНОВЛЕНО -
С решением, предложенным Роба Напиром, проблема не исправлена, вместо этого она просто задерживается.
Когда вы пытаетесь определить ссылку на UserDemoPresenter, мне нужно указать общий тип, поэтому я получаю ту же ошибку:
private var presenter : UserDemoPresenter<GetUserView>
Использование GetUserView в качестве конкретного типа, соответствующего протоколу "GetUserView" не поддерживается