В Swift протоколы — это мощный инструмент, который позволяет разработчикам создавать гибкий, повторно используемый и масштабируемый код. Они играют ключевую роль в достижении абстракции и обеспечении полиморфизма — основных принципов объектно-ориентированного программирования (ООП). В этом блоге мы погрузимся в мир протоколов Swift, изучим их особенности и преимущества и продемонстрируем, как их можно использовать для разработки надежного и адаптируемого кода на практических примерах.

Это сообщение было первоначально опубликовано по адресуhttps://mahigarg.github.io/blogs/protocols-in-swift/ , а затем повторно опубликовано на Medium.

Что такое протоколы?

Протоколы в Swift похожи на интерфейсы в других языках программирования. Они определяют схему методов, свойств и других требований, которые должен принять класс или структура. Класс или структура, соответствующие протоколу, обещают обеспечить реализацию всех требований, определенных в этом протоколе.

Объявление протоколов

Начнем с создания простого протокола, определяющего требования к объекту, способному издавать звук:

protocol SoundMaker {
    func makeSound()
}

В этом примере мы объявили протокол SoundMaker с единственным требованием: метод makeSound().

Принятие протоколов

Теперь давайте создадим два класса, использующие протокол SoundMaker:

class Dog: SoundMaker {
    func makeSound() {
        print("Woof woof!")
    }
}

class Cat: SoundMaker {
    func makeSound() {
        print("Meow!")
    }
}

Оба класса Dog и Cat реализуют метод makeSound(), как того требует протокол SoundMaker.

Использование протоколов

Теперь, когда у нас есть классы, соответствующие протоколу SoundMaker, мы можем использовать тип протокола для создания коллекции различных объектов, создающих звук:

let dog = Dog()
let cat = Cat()

let soundMakers: [SoundMaker] = [dog, cat]

for soundMaker in soundMakers {
    soundMaker.makeSound()
}

Результатом будет:

Woof woof!
Meow!

Свойства протокола

Протоколы также могут требовать реализации свойств. Давайте изменим наш протокол SoundMaker, включив в него свойство name:

protocol SoundMaker {
    var name: String { get }
    func makeSound()
}

Пожалуйста, продолжайте читать по адресу https://mahigarg.github.io/blogs/protocols-in-swift/.