2
我正在通过一些Swift开源代码进行搜索,现在已经看到术语“标记协议”弹出两次。从上下文我推断它作为一个协议存在的代码可读性的原因,而不是实际执行规则。任何人都可以解释一下“标记协议”究竟是什么以及为什么使用它?什么是Swift中的“标记协议”?
我正在通过一些Swift开源代码进行搜索,现在已经看到术语“标记协议”弹出两次。从上下文我推断它作为一个协议存在的代码可读性的原因,而不是实际执行规则。任何人都可以解释一下“标记协议”究竟是什么以及为什么使用它?什么是Swift中的“标记协议”?
标记协议是从其他面向对象的编程语言借用的设计模式,它允许协议或接口。这个想法是标记一个类以特定的方式使用,但不要求该类通过实现特定的方法来提供任何功能。例如,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是一种具有属性的演进语言,但它们都是预定义的。添加用户定义的属性将消除对标记协议的需求。