Какой практический смысл в протоколах?


#1

Здравствуйте!
На этом видео (видео с swiftbook.ru) https://www.youtube.com/watch?v=2Y8KE6bsGjQ используют протоколы, но если от них избавиться и в качестве делегата в SecondViewController объявить var delegate: ViewController?, то все будет работать.
Зачем мы используем протоколы?


#2

#3

Я смотрел это видео, о том какой практический смысл протоколов в нем не говорят, а просто его используют, причем используют его тогда когда в нем необходимости и нет. Если в этом примере от этого протокола избавиться, ничего не изменится, результат останется тем-же, а кода будет меньше.


#4

Смысл достаточно простой.

  1. Это инкапсуляция. К примеру зачем ячейке видеть какие-то методы своего родителя.
  2. Протокол (как и интерфейс) задает некий необходимый набор функционала, который должен быть указан в родителе. Тем самым родитель знает что он получит от протокола.

P.S. по большей части это правило написания чистого кода. Если ваш код будет написан в обход протоколов (интерфейсов), при ревью вас по головке не погладят.


#5

Протокол - это образ, по которому строяться объекты: они обязаны удовлетворять требованиям протокола, те если в проколе есть метод или свойство, то все объекты структуры или класса, подписанного на этот протокол, обязаны иметь эти свойства. В примере делегирования используют протокол, чтобы подписать класс на этот протокол, чтобы в классе “цели” (те куда переходят - назад) появился нужный метод (функция) протокола. Тогда в классе источнике (тоже подписанном на этот протокол, и где назначается делегирование) в этот метод (функцию) передадут параметр (значение, например “10”), и он автоматически появится в методе, делегата, те класса, которой принимает (в примере переход назад - это класс контроллера куда перешли назад) метода делегата. Те таким методом передают параметр через метод в другой класс.
Я думаю если неочень понятно, то ещё раз смотрите видео.

Работает ваш пример, птотому что вы не проверяли передачу данных ))


#6

Наверно важнее упомянуть полиморфизм


#7

" в этот метод (функцию) передадут параметр (значение, например “10”), и он автоматически появится в методе, делегата, те класса, которой принимает метода делегата"

Но ведь в протоколе мы не реализуем функцию, а только объявляем ее. И тогда конкретная реализация в каждом классе может быть разная, как в этом случае передается значение параметра?