我不明白代表们的意思

时间:2019-06-22 22:24:47

标签: ios swift delegates

我无法快速理解代表的用途

我试图在任何可能的站点中搜索代表的含义及其用途,但我无法完全理解他们的含义。

f.e。在此代码中

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

    }
}

分配给ViewController的委托应该做什么?以及我该如何使用它们?

2 个答案:

答案 0 :(得分:3)

我喜欢类比思考:

会有一个“ 发言人”和一个“ 听众”。

UIImagePickerController已经配置为在事件发生时“ ”,因此当发生didFinishPickingMediaWithInfo之类的事件时,它会“ ”。 / p>

在您的情况下,UIViewController应该是“ 侦听器”,该配置为:

picker.delegate = self,假设UIViewController实现了UIImagePickerControllerDelegate


换句话说,当UIViewController说话”时,将picker设为“ 收听者”。

选择者“ ”的所有内容都将通过UIImagePickerControllerDelegate被“ 收听”的人“ 收听


注意:这是非常肤浅和抽象的,当然它不止于此,但是我正在考虑OP的情况。

答案 1 :(得分:2)

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)
}