Swift中未手动调用的imagePickerController方法为何自动执行?
imagePickerController方法不用手动调用就能自动执行? 嘿,这绝对是个超正常的入门问题——刚从其他编程语言转过来,iOS这种“自动触发方法”的逻辑确实容易让人摸不着头脑😉
核心原因是你用到了iOS里的委托(Delegate)设计模式,这是苹果框架里非常常用的回调机制,我给你拆解一下:
你主动“绑定”了委托关系
你在代码里写了imagePicker.delegate = self,这一步相当于告诉UIImagePickerController:“我这个ViewController来负责处理你产生的事件哦”。这个方法是协议规定的回调方法
imagePickerController(_:didFinishPickingMediaWithInfo:)是UIImagePickerControllerDelegate协议里定义的方法。当用户完成图片选择操作时,UIImagePickerController内部会自动检查它的delegate对象(也就是你的ViewController)有没有实现这个方法。如果实现了,系统就会自动调用这个方法,同时把选中的图片信息通过info参数传递给你。和你之前的开发经验对比
你之前用的语言可能需要手动给事件绑定处理函数(比如给按钮添加点击监听时手动指定要调用的方法),但iOS的委托模式是框架层面已经封装好了事件触发的时机——系统知道用户什么时候选完图片,什么时候该调用这个回调方法,你只需要提前写好处理逻辑,并且把委托关系设置好就行。
举个生活化的例子:你去快递站寄快递,把快递交给工作人员(设置delegate),工作人员会在快递送达后自动给你发短信(调用回调方法),你不用一直盯着快递站问“到了吗到了吗”,只需要等着收短信处理就行😎
这种模式在iOS里到处都是,比如UITableViewDelegate处理列表的点击、滚动事件,UICollectionViewDelegate处理集合视图的交互,都是同样的逻辑,用多了就习惯啦!
内容的提问来源于stack exchange,提问作者four-eyes

