Я искал какой-то Swift с открытым исходным кодом и теперь видел, как термин «протокол маркера» появляется дважды. Из контекста я вывел его как протокол, который существует для целей чтения кода, а не для соблюдения правил. Может ли кто-нибудь объяснить, что такое «протокол маркеров» и почему он используется?Что такое «протокол маркеров» в Swift?
ответ
Протокол маркера - это шаблон дизайна, заимствованный из других объектно-ориентированных языков программирования, которые позволяют протоколы или интерфейсы. Идея состоит в том, чтобы пометить класс для использования определенным образом, но не требуя, чтобы класс предоставлял любую функциональность, применяя определенные методы. Например, 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 - развивающийся язык, который имеет атрибуты, но все они заранее определены. Добавление пользовательских атрибутов устраняет необходимость в протоколах маркеров.