Можно ли добавить соответствие протокола другому протоколу посредством расширения?Расширение существующих протоколов для реализации другого протокола с установками по умолчанию
Например, мы хотели бы, чтобы соответствовать B:
protocol A {
var a : UIView {get}
}
protocol B {
var b : UIView {get}
}
Я хочу дать реализацию по умолчанию (соблюдение) B к объектам типа А
// This isn't possible
extension A : B {
var b : UIView {
return self.a
}
}
мотивация в том, чтобы повторно использовать объекты А в случаях, когда требуется В, без создания моего собственного «моста»
class MyClass {
func myFunc(object : A) {
...
...
let view = object.a
... do something with view ...
myFunc(object) // would like to use an 'A' without creating a 'B'
}
func myFunc2(object : B) {
...
...
let view = object.b
... do something with view ...
}
}
Как примечание стороны, мы можем расширить класс для осуществления протокола
class C {
let C : UIView
}
// this will work
extension C : B {
var B : UIView {
return self.c
}
}
и протоколы могут дать реализацию по умолчанию
extension A {
// a default implementation
var a : UIView {
return UIView()
}
}
Это в корне отличается от того просит ОП , Если у него нет контроля над «А» или «В», это не поможет. –
Тогда, я полагаю, вы можете сделать протокол 'C', который реализует как' A', так и 'B', при необходимости по умолчанию? –
Я не хочу создавать дополнительные протоколы. –