Я не могу понять, о чем делегаты - PullRequest
0 голосов
/ 23 июня 2019

Я не могу понять, для чего используются делегаты в swift

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

например, в этом коде

extension SignUpViewController : UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    }
}

что должны делать делегаты, назначенные ViewController?и как я могу понять, как их использовать?

Ответы [ 2 ]

3 голосов
/ 23 июня 2019

Мне нравится думать по аналогии:

Будет " динамика " и " слушатель ".

UIImagePickerController уже настроен на " говорит ", когда происходят события, поэтому, когда происходит что-то вроде didFinishPickingMediaWithInfo, он " говорит ".

В вашем сценарии UIViewController должен быть " слушатель ", это настроено на:

picker.delegate = self, предполагая, что UIViewController реализует UIImagePickerControllerDelegate.


В другомсловами, сделайте UIViewController " слушателем ", когда picker " говорят ".

И всем, что говорит сборщик " говорят", будет" прослушано"через UIImagePickerControllerDelegate кем бы ни было" прослушивание".


Примечание: Этоочень поверхностно и абстрактно, конечно, это выходит далеко за рамки этого, но я рассматриваю ситуацию ОП.

2 голосов
/ 23 июня 2019

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

let picker = UIImagePickerController()
picker.delegate = self  // connection here 

выше получатель - SignUpViewController экземпляр, а отправитель - UIImagePickerController экземпляр после того, как пользователь выбирает фото / видео, вызываемое сборщиком didFinishPickingMediaWithInfo, что является одним из UIImagePickerControllerDelegate методов, это то, что происходит под капотом

class UIImagePickerController { // look for it in framework visible part
   weak var delegate:UIImagePickerControllerDelegate?
   ....
   delegate?.imagePickerController(self,didFinishPickingMediaWithInfo:info)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...