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
属性 以避免保留循环。
一个 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
属性 以避免保留循环。