I cannot understand what delegates are about

人盡茶涼 提交于 2019-12-25 01:53:40

问题


I cannot understand what Delegates are used for in swift

I tried to search in any possible site what a delegate is and for what it is used for but I cannot completely grasp the meaning of them.

f.e. in this code

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

    }
}

what are the delegates assigned to the ViewController supposed to do? and how can I understand how to use them?


回答1:


I like to think with an analogy:

There will be a "speaker" and a "listener".

UIImagePickerController is already configured to "speak" when events happen, so when something like didFinishPickingMediaWithInfo happens, it "speaks" .

In your scenario, the UIViewController should be the "listener", this is configured with:

picker.delegate = self, assuming UIViewController implements UIImagePickerControllerDelegate.


In other words, make the UIViewController the "listener" for when the picker "speak".

And everything that the picker "speak", will be "listened" via UIImagePickerControllerDelegate by whoever is "listening".


Note: This is very superficial and abstract, of course it goes much beyond this, but I'm considering the OP situation.




回答2:


A delgate is a connection between 2 data types commonly vcs , that enable 1 of them to send data to the other by calling a method from the protocol that the receiver is conforming to in you example you set

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

above receiver is SignUpViewController instance and sender is UIImagePickerController instance after the user picks a photo/video the picker calls didFinishPickingMediaWithInfo which is 1 of the UIImagePickerControllerDelegate methods , this what happens under the hood of

class UIImagePickerController { // look for it in framework visible part
   weak var delegate:UIImagePickerControllerDelegate?
   ....
   delegate?.imagePickerController(self,didFinishPickingMediaWithInfo:info)
}


来源:https://stackoverflow.com/questions/56719604/i-cannot-understand-what-delegates-are-about

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!