代码之家  ›  专栏  ›  技术社区  ›  four-eyes

函数已创建,但从未调用,但仍在执行

  •  0
  • four-eyes  · 技术社区  · 6 年前

    我对iOS开发和Swift非常陌生,如果这是一个微不足道的问题,我很抱歉。我有以下代码

    import UIKit
    
    class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    
        var imagePicker: UIImagePickerController!
    
        @IBOutlet weak var imageView: UIImageView!
    
        @IBAction func openGalery(_ sender: UIButton) {
            if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
                imagePicker = UIImagePickerController()
                imagePicker.delegate = self
                imagePicker.sourceType = .photoLibrary;
                imagePicker.allowsEditing = true
                present(imagePicker, animated: true, completion: nil)
            }
        }
    
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
            imagePicker.dismiss(animated: true, completion: nil)
            imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    

    在代码中,我创建了 func imagePickerController . imagePickerController 负责在 imageView . 它起作用了。我打开盖里,我选择一个图像,然后有一个转换回图像集的视图。但是,为什么它能工作?我从不调用函数 图像采集控制器 . 将它与我以前使用的语言进行比较,我应该在 PhotoLibrary . 像一个事件或什么的。但在这里,它是以某种方式自动调用的,只有通过定义函数。为什么?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Alexander    6 年前

    imagePicker.delegate = self

    翻译为:“嘿 imagePicker 如果发生什么事,打电话告诉我 UIImagePickerControllerDelegate 方法!”

    尤其是,您的实现 imagePickerController(_:didFinishPickingMediaWithInfo:) 正在被调用,这是 UIImagePickerControllerDelegate 协议。

        2
  •  1
  •   AVerguno    6 年前

    它是 委托模式 .

    当你准备好 imagePicker 的委托给 self ,您开始从选取器接收事件。

    中定义的事件 protocol . 在这种情况下, UIImagePickerControllerDelegate

    这种模式在iOS开发中经常使用。 有关委派模式的详细信息,请阅读 in Apple's documentation