无法将“(String!, Bool, [AnyObject]!, NSError!)->Void 类型的值分配给 UIActivityViewControllerCompletionWithItemsHandler 类型的值?”

Cannot assign a value of type '(String!, Bool, [AnyObject]!, NSError!)->Void to a value of type UIActivityViewControllerCompletionWithItemsHandler?'

我的项目中有以下几行代码...

@IBAction func shareMeme(sender: UIBarButtonItem) {

    let newMeme = save()
    let memedImage = newMeme.memedImage
    let activityViewController = UIActivityViewController(activityItems: [memedImage], applicationActivities: nil)

    presentViewController(activityViewController, animated: true, completion: nil)

    activityViewController.completionWithItemsHandler = {(type: String!, completed: Bool, returnedItems: [AnyObject]!, error: NSError!) -> Void in

        dispatch_async(dispatch_get_main_queue()){
            self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
        }
    }
}

我不断收到编译器错误 "Cannot assign a value of type '(String!, Bool, [AnyObject]!, NSError!) -> Void' to a value of type 'UIActivityViewControllerCompletionWithItemsHandler?'" 引用以下代码行...

    activityViewController.completionWithItemsHandler = {(type: String!, completed: Bool, returnedItems: [AnyObject]!, error: NSError!) -> Void in

如有任何建议,我们将不胜感激。

您的类型签名与 UIActivityViewControllerCompletionWithItemsHandler 的定义不匹配,即 (String?, Bool, [AnyObject]?, NSError?) -> Void。用 ?s 替换你的 !s,它应该可以正常工作。

对于Swift 3.0,签名应该是

activityViewController.completionWithItemsHandler = { (activity: UIActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in

如图