以下情况:
STDisjoint()
我怎样才能实现以下目标:
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();
}
这不起作用,因为Cursor Wiggle和Element都从Sprite继承。
因此我在考虑使用像:
这样的扩展方法class Button: Wiggle{
// needs s();
// needs w();
}
class Cursor: Element, Wiggle{
// needs s();
// needs w();
// needs e();
}
class Pointer: Element{
// needs w();
// needs e();
}
如何延长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();
}
& Button
只需一步即可完成?
答案 0 :(得分:1)
您可以将w()
置于自己的协议中,例如Wable
与Button
符合的Cursor
。为Wable
提供w()
默认实现。由于w()
取决于s()
,因此您必须对扩展程序施加约束,以便仅适用于从Sprite
派生的符合类型("来源" of { {1}})。
s()