func openGallery(sender: AnyObject) {
var imagePicker = UIImagePickerController()
imagePicker.delegate = sender
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
imagePicker.allowsEditing = true
sender.navigationController?.presentViewController(imagePicker, animated: true, completion: nil)
}
我想组织我的UIViewControllers
以将所有imagepicker方法放在一个地方。我想以某种方式编写这个方法并让它工作。由于我正在访问多个类中的摄像头,因此我不想让“发送者”成为特定的ViewController
类名,这会破坏整个目的。无论我试图代替'AnyObject',我都会收到UIImagePickerControllerDelegate
& UINavigationControllerDelegate
。
我尝试过这种类型的解决方案也没有用,因为我需要两位代表:
var newSender = sender as UIImagePickerControllerDelegate
我该如何解决这个问题?
答案 0 :(得分:1)
您的演员阵容需要的是协议合成。
引自“ Swift编程语言”,p。 545:
您可以使用协议组合将多个协议组合到一个需求中。方案组合物具有
protocol<SomeProtocol, AnotherProtocol>
形式。您可以根据需要在尖括号对(<>
)中列出尽可能多的协议,用逗号分隔。
以下是如何将此概念应用于您的具体案例:
imagePicker.delegate = sender as? protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>