Как создать делегаты в Swift

Что такое делегаты?

Делегаты – это объекты, которые позволяют одному объекту отправлять сообщение при возникновении событий. Если вы не новичок, то вы полностью осведомлены о шаблоне делегата, используемом при разработке приложений для iOS. Если вы новичок и не поняли определения, написанного в начале этого руководства, не волнуйтесь, я объясню это простым языком с помощью примера в реальном времени.

Предположим, вам нужно просмотреть контроллеры VC1 и VC2; и в настоящее время пользователь находится на VC1, затем переходит к VC2. В VC2 пользователь что-то выбрал, и мы должны отобразить выбранный элемент на VC1. Этого можно достичь с помощью делегатов, поскольку делегат отправит сообщение в VC1, когда пользователь что-то выберет в VC2.

Как создать делегат

Синтаксис:

protocol delegateName: class {
    func delegate function name() 
}

Мы создали делегат на основе классов, потому что в Swift мы можем создать слабую ссылку для делегирования объекта только в том случае, если он создан на основе классов.

Пример:

protocol AACalendarDelegate: class {
    func dateSelected(date: NSDate)
}

В приведенном выше примере мы создали делегат для нашего класса VC2. Когда пользователь выбирает данные, мы  запустим функцию делегата dateSelected, и она запустит реализацию функции в VC1.

Создание свойства делегата, чтобы оно было доступно через класс VC1. Полный код класса VC2 будет выглядеть примерно так:

protocol AACalendarDelegate: class {
    func dateSelected(date: NSDate)
}

class VC2 : UIView {
  weak var delegate:AACalendarDelegate? 
}

Уведомление VC1 с помощью delgate:

func doneWithDateSelection() {
        self.delegate?.dateSelected(NSDate(timeIntervalSinceNow: 0))
    }

В приведенном выше коде мы заставляем нашего делегата вызвать dateSelected функцию, чтобы класс VC1 получил уведомление. Это важно для того, чтобы класс VC1 получил событие, когда пользователь выбрал некоторые данные в классе VC2.

+1
1
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *