В Swift объявляют переменную протокола, которая должна соответствовать хотя бы одному протоколу
Как определить переменную в протоколе в Swift4, которая, по крайней мере, должна соответствовать протоколу, но также может соответствовать и другим протоколам?
Например, теперь я получаю сообщение об ошибке, если протокол объявляет, что переменная должна соответствовать протоколу B, и я хочу, чтобы переменная в реализации соответствовала совокупности различных протоколов (B + C).
// For example: Presenter can conform to default stuff
protocol A {
var viewController: C? { get set }
func presentDefaultStuff()
}
extension protocol A {
func presentDefaultStuff() {
viewController?.displayDefaultStuff()
}
// Presenter can conform to custom stuff
protocol B {
func presentCustomStuff()
}
// viewController can conform to default stuff
protocol C {
func displayDefaultStuff()
}
// viewController can conform to custom stuff
protocol D {
func displayCustomStuff()
}
class SomeClass: A & B {
// Gives an error: Type 'SomeClass' does not conform to protocol 'A'
// because protocol A defines that viewController needs to be of
// type C?
var viewController: (C & D)?
}
Отредактировано: я отредактировал свой исходный пост, чтобы сделать вопрос более ясным, я также нашел решение, чтобы сделать то, что я хотел достичь: я могу разделить класс и сделать расширение для реализации, которое соответствует одному из протоколов, например:
class someClass: B {
customViewController: (C & D)?
}
extension someClass: A {
var viewController: C? {
return customViewController
}
}
Компилятор проверяет тип, что customViewController соответствует C?.