gpt4 book ai didi

swift - 从具有相同父类(super class)的多个类继承 - 解决方法

转载 作者:行者123 更新时间:2023-11-30 10:01:45 26 4
gpt4 key购买 nike

以下情况:

class Sprite{ // has to be a class, not a protocol!
func s(); // can not be changed
}
class Element: Sprite{
// needs s(); for:
func e();
}
class Wiggle: Sprite{
// needs s(); for:
func w();
}

我怎样才能实现这样的目标:

class Button: Wiggle{
// needs s();
// needs w();
}
class Cursor: Element, Wiggle{
// needs s();
// needs w();
// needs e();
}
class Pointer: Element{
// needs w();
// needs e();
}

这不起作用,因为 Cursor Wiggle 和 Element 都继承自 Sprite。

因此我正在考虑使用扩展方法,例如:

class Button:Sprite{
// needs s();
// needs w();
}
class Cursor: Element{
// needs s();
// needs w();
// needs e();
}
class Pointer: Element{
// needs w();
// needs e();
}

extension Button, Cursor { // or similar to make w() available in Button & Cursor
// using s() for:
// func w();
}

如何一步扩展 ButtonCursor

最佳答案

您可以将 w() 放入其自己的协议(protocol)中,例如WableButtonCursor 符合。为 Wable 提供 w() 的默认实现。由于 w() 依赖于 s(),因此您必须对扩展施加约束,使其仅适用于从 Sprite 派生的符合类型>(s() 的“源”)。

class Button: Sprite, Wable {
// needs s(); inherited from Sprite
// needs w(); inherited from Wable
}

class Cursor: Element, Wable {
// needs s(); inherited from Sprite
// needs w(); inherited from Wable
// needs e(); inherited from Element
}

class Pointer: Element, Wable {
// needs w(); inherited from Wable
// needs e(); inherited from Element
}

protocol Wable {
func W()
}

extension Wable where Self : Sprite {
func W() {
print("foo")
}
}

关于swift - 从具有相同父类(super class)的多个类继承 - 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132916/

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