Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MFMailComposeViewController in Swift

This is sample code:

import UIKit import MessageUI  class ViewController: UIViewController, MFMailComposeViewControllerDelegate {      @IBAction func showEmail(sender : AnyObject) {         var emailTitle = "Test Email"         var messageBody = "This is a test email body"         var toRecipents = ["[email protected]"]         var mc: MFMailComposeViewController = MFMailComposeViewController()         mc.mailComposeDelegate = self         mc.setSubject(emailTitle)         mc.setMessageBody(messageBody, isHTML: false)         mc.setToRecipients(toRecipents)          self.presentViewController(mc, animated: true, completion: nil)     }      override func viewDidLoad() {         super.viewDidLoad()         // Do any additional setup after loading the view, typically from a nib.     }      func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError) {         switch result {         case MFMailComposeResultCancelled:             NSLog("Mail cancelled")         case MFMailComposeResultSaved:             NSLog("Mail saved")         case MFMailComposeResultSent:             NSLog("Mail sent")         case MFMailComposeResultFailed:             NSLog("Mail sent failure: %@", [error.localizedDescription])         default:             break         }         self.dismissViewControllerAnimated(false, completion: nil)     } } 

In function mailComposeController I get an error on every case expression:

Could not find an overload '~=' that accepts the supplied arguments.

What am I doing wrong?

like image 227
Alexey Nakhimov Avatar asked Jun 19 '14 15:06

Alexey Nakhimov


People also ask

How do I open an email in Swift IOS?

Show activity on this post. let email = "[email protected]" let url = URL(string: "mailto:\(email)") UIApplication. shared. openURL(url!)


1 Answers

I compared MFMailComposeResult documentation on both Xcode 5 and Xcode 6. In Swift, MFMailComposeResult is a struct

struct MFMailComposeResult {     init(_ value: CUnsignedInt) // available in iPhone 3.0     var value: CUnsignedInt } 

with MFMailComposeResultCancelled as a constant of type MFMailComposeResult:

var MFMailComposeResultCancelled: MFMailComposeResult { get } 

while it's an enum in Objective-C:

 enum MFMailComposeResult {     MFMailComposeResultCancelled,     MFMailComposeResultSaved,     MFMailComposeResultSent,     MFMailComposeResultFailed }; typedef enum MFMailComposeResult MFMailComposeResult;   // available in iPhone 3.0 

In order to make your code work, you will have to compare their values which are CUnsignedInt.

So you will have to type the following code:

func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError) {     switch result.value {     case MFMailComposeResultCancelled.value:         println("Mail cancelled")     case MFMailComposeResultSaved.value:         println("Mail saved")     case MFMailComposeResultSent.value:         println("Mail sent")     case MFMailComposeResultFailed.value:         println("Mail sent failure: \(error.localizedDescription)")     default:         break     }     self.dismissViewControllerAnimated(false, completion: nil) } 
like image 77
Audrey Sobgou Zebaze Avatar answered Oct 11 '22 08:10

Audrey Sobgou Zebaze