Как создать делегаты в 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.