Swift。将 UIImagePicker 的委托作为参数传递

Swift. Pass delegate for UIImagePicker as argument

一个 class ImagePicker 包含和 UIImagePicker:

class ImagePicker {
    let imagePicker = UIImagePickerController()
    var delegate: AnyObject?

    init(delegate: AnyObject?) {
        self.delegate = delegate
    }

    func pickPhoto() {
       self.imagePicker.delegate = delegate
       // The line above gives an error "Cannot assign a value of type 'AnyObject?' to a value of type 'protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>?'

       delegate?.presentViewController(imagePicker, animated: true, completion: nil)
    }
}

UICollectionView 初始化图像选择器:

let imagePicker = ImagePicker(self)
imagePicker.pickPhoto()

由于上述错误,这不起作用,但我该怎么做?

委托不能是 AnyObject? 类型。它必须是类型 protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>? 而不是:

class ImagePicker {
    let imagePicker = UIImagePickerController()
    weak var delegate: protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>?

    init(delegate: protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>?) {
        self.delegate = delegate
    }
    ....
}

您还应该将其设为 weak 属性 以避免保留循环。