Mam zajęcia z delegatem. Tworzę podklasę, która również ma delegata. Chciałem niech protokół wykorzystywany do drugiego delegata przedłużyć protokół używany przez pierwszego delegata:Dziedziczenie protokołów + delegaci w Swift
protocol MySuperClassProtocol {
func foo()
}
class MySuperClass {
var delegate:MySuperClassProtocol?
}
protocol MySubClassProtocol:MySuperClassProtocol {
func bar()
}
class MySubClass: MySuperClass {
override var delegate:MySubClassProtocol? // compiler error - "cannot override..."
func test() {
delegate?.foo()
delegate?.bar()
}
}
class UserClass:MySubClassProtocol {
func foo() {
println("foo!")
}
func bar() {
println("bar")
}
}
Czy istnieje sposób, aby rozwiązać ten problem? Jedynym możliwym rozwiązaniem jest uniezależnienie dwóch protokołów od siebie i użycie różnych nazw. Tak:
protocol MySuperClassProtocol {
func foo()
}
class MySuperClass {
var mySuperClassDelegate:MySuperClassProtocol?
}
protocol MySubClassProtocol {
func bar()
}
class MySubClass: MySuperClass {
var mySubClassDelegate:MySubClassProtocol?
func test() {
mySuperClassDelegate?.foo()
mySubClassDelegate?.bar()
}
}
class UserClass:MySuperClassProtocol, MySubClassProtocol {
func foo() {
println("foo!")
}
func bar() {
println("bar")
}
}
Ale wygląda to nieco dziwne + nie pozwoli mi korzystać nazewnictwo dla delegate- „delegata”.
Dlaczego potrzebujesz protokołu Super Class i Super Class? –
Ponieważ umieszczam wspólną funkcjonalność wielu klas w super klasie i jest tam również "wspólny delegat". – Ixx