iosswiftswift3mfmailcomposer

MailComposer didFinishWith results doesn't work in Swift 3.0


I converted my app to swift 3.0 and have a problem with MailComposeController. When I call function:

`func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?){
    controller.dismiss(animated: true, completion: nil)
}`

first of all I have an error with info: enter image description here

what is strange for my, becouse I copy and paste this method from MFMailComposeViewControllerDelegate. When I change Error to NSError it works, but I receive a warning with info, this method needs to be private to avoid this warning.

When I'm in mailComposer and see email and try to tap Cancel this controller doesn't disapear. Any solution how to dismiss this controller?


Solution

  • I had the same problem because I was importing RealmSwift, which has its own Error struct.

    Fix it by specifying which Error type you want. In this case, Swift.Error.

    Full Code:

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Swift.Error?){
        controller.dismiss(animated: true, completion: nil)
    }