IOS开发中的协议,扩展和类别有什么区别?以及如何恰当地使用它们?

Chr*_*ver 17 objective-c ios swift

另外,Swift和Objective-C语言之间的这三件事有什么不同吗?谢谢.

Viv*_*kar 35

协议

协议声明了任何类可以选择实现的编程接口.

协议定义了适合特定任务或功能的方法,属性和其他要求的蓝图.协议就像接口,它提供了符合类必须实现的一些方法.

用途:

  • 一个常见的用例是让您改变某些类的行为,而无需对它们进行子类化.
  • 如:UITableViewDelegate,UITableViewDataSource

另见Protocol

延期

扩展为现有的类,结构,枚举或协议类型添加新功能.这包括扩展您无法访问原始源代码的类型的能力(称为追溯建模).

扩展类似于Objective-C中的类别.(与Objective-C类别不同,Swift扩展没有名称.)

用途:

  • 类别是通过将其实现扩展到许多文件来模块化类的一种方法.扩展提供类似的功能.

  • 类别最常见的用途之一是向内置数据类型添加方法,如NSStringNSArray.这样做的好处是您不必更新现有代码即可使用新的子类


扩展和类别在Objective-C中有一些差异

注意:以下仅适用于Objective-C

类别允许您在主界面文件之外添加方法.而扩展必须在主接口文件中实现.这意味着我们可以安全地得出结论,您不能使用扩展来扩展您没有源代码的内置类或类,您应该使用类别.要使用扩展,您需要访问要扩展的类的源.