栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有超类和子类的Swift协议扩展方法分派

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有超类和子类的Swift协议扩展方法分派

摘自The Swift Bugs Future的Ghost帖子,这是帖子末尾提到的协议扩展的分发规则。

  1. 如果变量的推断类型是协议:
  2. 并且该方法在原始协议中定义,然后调用运行时类型的实现,而不管扩展中是否存在默认实现。
  3. 并且该方法未在原始协议中定义,然后调用默认实现。
  4. 如果变量的推断类型是类型,则调用该类型的实现。

因此,根据您的情况,您是说method1()在协议中定义,并且已在子类中实现。但是您的超类正在采用协议,但未实现method1(),子类只是从超类继承而未直接采用协议。这就是为什么我认为这就是为什么当您调用foo.method1()时,它没有调用第1点和第2点所述的子类实现的原因。

但是当你这样做时

class SomeSuperclass: TheProtocol {func method1(){ print("super class implementation of method1()")}}class MyClass : SomeSuperclass {override func method1() {    print("Called method1 from MyClass implementation")}override func method2NotInProtocol() {    print("Called method2NotInProtocol from MyClass implementation")}}

然后当你打电话时,

 let foo: TheProtocol = MyClass()foo.method1()  // Called method1 from MyClass implementationfoo.method2NotInProtocol()

因此,此bug(似乎是bug)的解决方法是,您需要在超类中实现protocol方法,然后需要在子类中覆盖protocol方法。高温超导



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401498.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号