如何发送符合UIImagePickerControllerDelegate的UIViewController,UINavigationControllerDelegate

时间:2015-02-12 10:56:38

标签: ios swift uiimagepickercontroller

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的演员阵容需要的是协议合成

引自“ Swift编程语言”,p。 545:

  

您可以使用协议组合将多个协议组合到一个需求中。方案组合物具有protocol<SomeProtocol, AnotherProtocol>形式。您可以根据需要在尖括号对(<>)中列出尽可能多的协议,用逗号分隔。

以下是如何将此概念应用于您的具体案例:

imagePicker.delegate = sender as? protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>