什么是Swift中的“标记协议”?

时间:2016-01-24 02:19:53

标签: swift protocols terminology

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

1 个答案:

答案 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是一种具有属性的不断发展的语言,但它们都是预先定义的。添加用户定义的属性将消除对标记协议的需求。