2016-01-24 16 views
2

Я искал какой-то Swift с открытым исходным кодом и теперь видел, как термин «протокол маркера» появляется дважды. Из контекста я вывел его как протокол, который существует для целей чтения кода, а не для соблюдения правил. Может ли кто-нибудь объяснить, что такое «протокол маркеров» и почему он используется?Что такое «протокол маркеров» в Swift?

ответ

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 могла использовать аннотации для обработки сериализуемости, так же, как и C# с использованием атрибутов , но эта функция не была доступна в то время.

Swift - развивающийся язык, который имеет атрибуты, но все они заранее определены. Добавление пользовательских атрибутов устраняет необходимость в протоколах маркеров.