Как сделать делегата, то есть NSUserNotificationCenterDelegate
быстро?
delegates
swift
delegation
user3718173
источник
источник
Ответы:
Это ничем не отличается от obj-c. Во-первых, вы должны указать протокол в объявлении вашего класса, как показано ниже:
Реализация будет выглядеть следующим образом:
Конечно, вы должны установить делегата. Например:
источник
@interface MyCustomClass: UIViewController <ClassIWantToUseDelegate>
обмануть, позволяя вам инициализировать / настраивать контроллер представления, а также вызывать методы делегата для вложенных представлений? Что-то похожее на это ?Вот небольшая справка по делегатам между двумя контроллерами представления:
Шаг 1: Создайте протокол в UIViewController, который вы будете удалять / будут отправлять данные.
Шаг 2: объявите делегата в отправляющем классе (например, UIViewcontroller)
Шаг 3. Использование делегата в методе класса для отправки данных в метод приема, который является любым методом, который принимает протокол.
Шаг 4: Примите протокол в получающем классе
Шаг 5. Реализация метода делегата
Шаг 6: Установите делегата в prepareForSegue:
И это должно сработать. Это, конечно, только фрагменты кода, но это должно дать вам представление. Для подробного объяснения этого кода вы можете перейти к моей записи в блоге здесь:
сегменты и делегаты
Если вам интересно, что происходит под капотом с делегатом, я написал об этом здесь:
под капотом с делегатами
источник
weak
нужен только для классов, а не структур и перечислений. Если делегат будет структурой или перечислением, вам не нужно беспокоиться о циклах сохранения. Однако делегируйте свой класс a (это верно для многих случаев, поскольку довольно часто это ViewController), тогда вам нужно,weak
но вам нужно объявить свой протокол как класс. Здесь есть дополнительная информация stackoverflow.com/a/34566876/296446Делегаты всегда сбивали меня с толку, пока я не понял, что делегат - это просто класс, который выполняет некоторую работу для другого класса . Это как если бы кто-то другой делал за вас всю грязную работу, которую вы не хотите делать сами.
Я написал небольшую историю, чтобы проиллюстрировать это. Прочитайте это на детской площадке, если хотите.
Давным-давно...
Итак, можно сказать, что создание и использование шаблона делегата состоит из трех ключевых частей.
Реальная жизнь
По сравнению с нашей историей о Босси-Большом Брате выше, делегаты часто используются для следующих практических целей:
Самое замечательное в том, что этим классам не нужно ничего знать друг о друге заранее, за исключением того, что класс делегата соответствует требуемому протоколу.
Я настоятельно рекомендую прочитать следующие две статьи. Они помогли мне понять делегатов даже лучше, чем документация .
Еще одна заметка
Делегаты, которые ссылаются на другие классы, которые им не принадлежат, должны использовать
weak
ключевое слово, чтобы избежать циклов сильных ссылок. Смотрите этот ответ для более подробной информации.источник
Я получил несколько исправлений к посту @MakeAppPie
Прежде всего, когда вы создаете протокол делегата, он должен соответствовать протоколу Class. Как в примере ниже.
Во-вторых, ваш делегат должен быть слабым, чтобы избежать цикла.
Наконец, вы в безопасности, потому что ваш протокол является необязательным значением. Это означает, что его «ноль» сообщение не будет отправлено в это свойство. Это похоже на условный оператор
respondToselector
в objC, но здесь все в одной строке:Выше у вас есть пример obj-C, а ниже у вас есть пример Swift того, как это выглядит.
источник
delegate?.myMethod
, не произойдет сбой, потому что если делегат,nil
то ничего не произойдет. Однако, если вы допустили ошибку и написали,delegate!.myMethod
вы можете потерпеть крах, если делегат не установлен, так что это, по сути, способ обезопасить вас ...Вот суть, которую я собрал. Мне было интересно то же самое, и это помогло улучшить мое понимание. Откройте это на игровой площадке Xcode, чтобы увидеть, что происходит.
источник
UIViewController
класс соответствующим делегату, который мы сделали? Они должны быть объявлены в одном быстром файле? Любая помощь будет много значить.class ViewController : UIViewController NameOfDelegate
.a.swift
соответствии с вашим ответом выше, он не появляетсяb.swift
. Я не могу добраться до любого класса за пределами моего файла swift. какие-нибудь проблемы?ДЕЛЕГАТЫ В SWIFT 2
Я объясняю на примере Delegate с двумя viewController'ами. В этом случае SecondVC Object отправляет данные обратно в первый View Controller.
Класс с протоколом декларации
В первом протоколе ViewController согласование выполняется здесь:
Определение метода протокола в First View Controller (ViewController)
Во время нажатия SecondVC из контроллера первого представления (ViewController)
источник
Первый класс:
Второй класс:
источник
Type 'ViewController' does not conform to protocol 'NetworkServiceDelegate'
пожалуйста. Это мой 6-й день на swift :)Очень просто пошагово (100% работает и проверено)
step1: Создать метод на первом контроллере представления
step2: установить делегата при нажатии на второй контроллер представления
step3: установите делегата как
class ViewController: UIViewController, ProcessStatusDelegate {
Шаг 4: Создать протокол
step5: взять переменную
step6: Вернувшись к предыдущему представлению, контроллер вызовет метод делегата, чтобы первый контроллер представления уведомил с данными
источник
Простой пример:
источник
Делегаты - это шаблон проектирования, который позволяет одному объекту отправлять сообщения другому объекту, когда происходит определенное событие. Представьте, что объект A вызывает объект B для выполнения действия. Как только действие завершено, объект A должен знать, что B выполнил задачу, и предпринять необходимые действия, это может быть достигнуто с помощью делегатов! Вот руководство по реализации делегатов шаг за шагом в Swift 3
Ссылка на учебник
источник
Вышеупомянутые решения казались немного связанными и в то же время избегали повторного использования одного и того же протокола в других контроллерах, поэтому я пришел с решением, которое более строго типизировано с использованием универсального стирания типов.
вывод : получил новое значение newValue
источник
В Swift 4.0
Создайте делегата в классе, который должен отправить некоторые данные или предоставить некоторые функции другим классам
подобно
После этого в классе, который собирается подтвердить этому делегату
источник