不幸的是,协议还没有这样的动态行为。
但是,您可以(在类的帮助下)通过
commonBehavior()在中实现
ParentClass并在中进行覆盖来做到这一点
ChildClass。您还需要一个
CommonThing或另一个类来遵循,
CommonTrait然后才是的超类
ParentClass:
class CommonThing: CommonTrait { func say() -> String { return "override this" }}class ParentClass: CommonThing { func commonBehavior() -> String { // calling the protocol extension indirectly from the superclass return (self as CommonThing).commonBehavior() } override func say() -> String { // if called from ChildClass the overridden function gets called instead return commonBehavior() }}class AnotherParentClass: CommonThing { override func say() -> String { return commonBehavior() }}class ChildClass: ParentClass { override func say() -> String { return super.say() } // explicitly override the function override func commonBehavior() -> String { return "from child class" }}let parent = ParentClass()parentClass.say() // "from protocol extension"let child = ChildClass()child.say() // "from child class"
由于这只是您问题的一个简短解决方案,我希望它适合您的项目。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)