我正在搜索一些Swift开源代码,现在看到“标记协议”一词弹出两次。从上下文我推断它是一个出于代码可读性原因而存在的协议,而不是实际上强制执行规则。任何人都可以确切地解释“标记协议”是什么以及为什么使用它?
答案 0 :(得分:5)
标记协议是从其他面向对象的编程语言中借用的设计模式,允许协议或接口。我们的想法是以特定方式标记一个类,但不要求类通过实现特定方法来提供任何功能。例如,Java使用此方法来标记类 serializable 。
以下是一个例子:
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
}
当通过语言明确地解决标记类的需要时,这种技术变得不那么重要了。例如,Java可以使用 annotations 来处理可串行化,就像C#使用属性一样,但是当时该功能尚未可用。 / p>
Swift是一种具有属性的不断发展的语言,但它们都是预先定义的。添加用户定义的属性将消除对标记协议的需求。