【问题标题】:Why do I need to provide method implementation when I extend a protocol in iOS Swift?为什么我在 iOS Swift 中扩展协议时需要提供方法实现?
【发布时间】:2016-02-19 07:34:48
【问题描述】:

我想扩展一些协议,而编写代码编译器抛出错误:please provide implementation of method。但是为什么我必须提供协议方法的实现呢?这应该在符合该协议的类中完成。

extension MyDelegate { 
    func addNewMethod() { } 
} 

protocol MyDelegate { 
     func myMethod() 
}

【问题讨论】:

  • 请显示错误代码和详细信息
  • extension MyDelegate { func addNewMethod(){ } } 协议 MyDelegate { func myMethod() }
  • required , optional 协议有两种,默认必须实现所有需要的协议。
  • 您应该编辑您的问题以在那里显示代码

标签: ios swift


【解决方案1】:

似乎according to the documentation 协议扩展只是为了给现有协议提供方法的默认实现而存在,因此并非每个使用该协议的类都必须实现相同的方法并具有相同的主体,从而为您节省大量复制粘贴,有点像协议的静态/类函数

听起来您不想要扩展,而是原始协议中的可选功能

【讨论】:

  • 我不知道这是否是协议扩展存在的唯一原因,但文档有点误导。这意味着默认实现是可选的,但实际上它们似乎是强制性的。仔细想想,这是有道理的。如果您没有提供默认实现,那么采用该协议并且不了解您的扩展的其他类将没有现在成为协议一部分的方法
  • @Paulw11 没错,文档并没有真正显示它的任何其他用途,所以不确定你还能用它做什么,我的回答只是基于我在文档中看到的内容,呵呵
  • 是的,这似乎不是 Apple 的最大努力
  • @Paulw11 似乎是这个wwdc video 32 分钟的一个不错的例子
  • 虽然归根结底它只是一个协议的默认实现,所以它真的可以做的一切
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多