У меня есть несколько протоколов, которые имеют одинаковое имя функции. Некоторые протоколы имеют связанные типы, где я не могу понять, как вызывать функции, как я делаю в не общих протоколах. Я получаю ошибку: Protocol 'MyProtocol1' can only be used as a generic contraint because it has Self or associated type requirements
Неоднозначные функции в нескольких расширениях протокола?
Вот что я пытаюсь сделать:
protocol Serviceable {
associatedtype DataType
func get(handler: ([DataType] -> Void)?)
}
struct PostService: Serviceable {
func get(handler: ([String] -> Void)? = nil) {
print("Do something...")
}
}
protocol MyProtocol1: class {
associatedtype ServiceType: Serviceable
var service: ServiceType { get }
}
extension MyProtocol1 {
func didLoad(delegate: Self) {
print("MyProtocol1.didLoad()")
}
}
protocol MyProtocol2: class {
}
extension MyProtocol2 {
func didLoad(delegate: MyProtocol2) {
print("MyProtocol2.didLoad()")
}
}
class MyViewController: UIViewController, MyProtocol1, MyProtocol2 {
let service = PostService()
override func viewDidLoad() {
super.viewDidLoad()
didLoad(self as MyProtocol1) // Error here: Protocol 'MyProtocol1' can only be used as a generic contraint because it has Self or associated type requirements
didLoad(self as MyProtocol2)
}
}
Как я могу специально вызвать функцию от расширения общего протокола?
Действительно пахнет. Я пытаюсь добиться множественного наследования с использованием расширений протокола. Например, в 'viewDidLoad' моего' UIViewController', я хотел бы выполнить каждую функцию 'didLoad' каждого из моих протоколов. – TruMan1
Тогда у вас должно быть свойство типа 'let loader: [Loader]', который содержит различные инициализации, которые вам нужны. –
Я, вероятно, подумал бы более глубоко об именах здесь, чтобы они соответствовали текущим стилям стиля Swift, но выше все равно, как я, безусловно, на него напал. –