Как вы уже знаете, Swift не имеет прямой поддержки делегирования классов.
Итак, вам может понадобиться больше кода, чем Kotlin, который имеет прямую поддержку Делегирования. Но вместо расширения каждого класса, который реализует протокол, вы можете добавить реализацию по умолчанию для делегирования.
protocol FooInterface {
func fooFun1()
//...
}
protocol FooDelegateable {
var fooDelegate: FooInterface {get}
}
extension FooInterface where Self: FooDelegateable {
func fooFun1() {
self.fooDelegate.fooFun1()
}
//...
}
struct SomeFoo: FooInterface {
func fooFun1() {
print("FooInterface is delegated to SomeFoo.")
}
}
class A: FooInterface, FooDelegateable {
private let foo: FooInterface
//FooDelegateable
var fooDelegate: FooInterface {return foo}
init(_ foo: FooInterface) {
self.foo = foo
}
//...
}
let a = A(SomeFoo())
a.fooFun1() //->FooInterface is delegated to SomeFoo.
Как это?