gpt4 book ai didi

ios - Swift 中的协议(protocol)继承 + 委托(delegate)

转载 作者:IT王子 更新时间:2023-10-29 05:27:20 26 4
gpt4 key购买 nike

我有一个有代表的类(class)。我创建了一个子类,它也有一个委托(delegate)。我想让用于第二个委托(delegate)的协议(protocol)扩展用于第一个委托(delegate)的协议(protocol):

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")
}
}

有办法解决吗?我看到的唯一可能的解决方案是使这两个协议(protocol)相互独立,并使用不同的名称。像这样:

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")
}
}

但这看起来有点奇怪 + 不允许我使用委托(delegate)的命名约定 - “delegate”。

最佳答案

抱歉发布了 necroposting,我找到的唯一解决方案是:

protocol SuperClassDelegate {
func first_method()
}

class SuperClass {
var delegate: SuperClassDelegate?

func do_something() {
delegate?.first_method()
}
}

protocol SubClassDelegate: SuperClassDelegate {
func second_method()
}

class SubClass: SuperClass {
private var subDelegate: SubClassDelegate?
override var delegate: SuperClassDelegate? {
get { return self.subDelegate }
set { self.subDelegate = newValue as! SubClassDelegate? }
}

//override func do_something() {
// super.do_something()
// subDelegate?.second_method()
//}

func do_something_other() {
//subDelegate?.first_method()
self.do_something()
subDelegate?.second_method()
}
}

class InheritanceAndDelegation: SubClassDelegate {
let obj = SubClass()

init() {
obj.delegate = self
}

internal func first_method() {
print("Hello from SuperClass")
}

internal func second_method() {
print("Hello from SubClass")
}

func check() {
obj.do_something_other()
}
}

let inheritanceAndDelegation = InheritanceAndDelegation()
inheritanceAndDelegation.check()
//prints:
//Hello from SuperClass
//Hello from SubClass

注释代码也可以。希望它对某人有用。

关于ios - Swift 中的协议(protocol)继承 + 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29058814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com