2016-01-24 73 views
2

我正在通过一些Swift开源代码进行搜索,现在已经看到术语“标记协议”弹出两次。从上下文我推断它作为一个协议存在的代码可读性的原因,而不是实际执行规则。任何人都可以解释一下“标记协议”究竟是什么以及为什么使用它?什么是Swift中的“标记协议”?

回答

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 
} 

这种技术变得缺乏相关性时,以纪念类需要由语言明确处理。例如,Java本来可以使用注释来处理可串行化,就像C#使用属性一样,但该功能在当时还不可用。

Swift是一种具有属性的演进语言,但它们都是预定义的。添加用户定义的属性将消除对标记协议的需求。