什么是Swift中的"标记协议"?

tne*_*nev 2 terminology protocols swift

我正在搜索一些Swift开源代码,现在看到"标记协议"一词弹出两次.从上下文我推断它是一个出于代码可读性原因而存在的协议,而不是实际上强制执行规则.任何人都可以确切地解释什么是"标记协议"以及为什么使用它?

das*_*ght 5

标记协议是从其他面向对象的编程语言中借用的设计模式,允许协议或接口.我们的想法是以特定方式标记一个类,但不要求类通过实现特定方法来提供任何功能.例如,Java使用这种方法来标记可序列化的类.

这是一个例子:

protocol Marker {}

class One : Marker {
    ...
}
class Two { // No marker
    ...
}
...
if (myObj is Marker) {
    ... // Objects of class One will pass
    ... // Objects of class Two will not pass
}
Run Code Online (Sandbox Code Playgroud)

当通过语言明确地解决标记类的需要时,这种技术变得不那么重要了.例如,Java可以使用注释来处理可序列化,就像C#使用属性一样,但是当时还没有这个功能可用.

Swift是一种具有属性的不断发展的语言,但它们都是预先定义的.添加用户定义的属性将消除对标记协议的需求.