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?
Show activity on this post. let email = "[email protected]" let url = URL(string: "mailto:\(email)") UIApplication. shared. openURL(url!)
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) }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With