xcode 6 beta 4 – MessageComposeResult不能转换为OptionalNilComparisonType

我刚刚从Xcode 6 Beta 3升级到Beta 4.在3我的应用程序编译完美,但在4我有以下错误。 任何人都可以解释和提供解决scheme,请。

func messageComposeViewController(sendMsg: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) { switch result { case MessageComposeResultSent : //Error: MessageComposeResult is not convertible to _OptionalNilComparisonType label2.text = "Msg Sent" case MessageComposeResultCancelled : //Error: MessageComposeResult is not convertible to _OptionalNilComparisonType label2.text = "Msg Send Cancelled" case MessageComposeResultFailed : //Error: MessageComposeResult is not convertible to _OptionalNilComparisonType label2.text = "Msg Send Failed" default: label2.text = "Msg Error" } self.dismissViewControllerAnimated(true, completion: nil) self.reloadInputViews() } 

这个模块被桥接到Swift的方式是一个错误。 举报。 要使用这个模块,留在Objective-C中,直到Swift桥接错误得到解决。

错误的主要部分在我看来似乎是:

  • 这应该是一个枚举,而不是; 这是一个结构

  • 该结构有一个value ,应该能够比较,但它没有getter(你可以设置它在初始化,但你不能得到它以后)

 func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) { switch result.value { case MessageComposeResultSent.value : println("enviado") case MessageComposeResultCancelled.value : println("cancelado") case MessageComposeResultFailed.value : println("fallo") default: println("") } } 

对于Swift 2 ,您将需要使用rawValue

 // MARK: MFMessageComposeViewControllerDelegate func messageComposeViewController(controller:MFMessageComposeViewController, didFinishWithResult result:MessageComposeResult) { controller.dismissViewControllerAnimated(true, completion:nil) switch result.rawValue { case MessageComposeResultSent.rawValue: print("cancelado") case MessageComposeResultCancelled.rawValue : print("canceled...") case MessageComposeResultFailed.rawValue : print("fail...") default: print("default...") } } 

当然,如果你只对一个特定的值感兴趣,你可以使用if语句:

 if (result.rawValue == MessageComposeResultCancelled.rawValue) { // Message canceled. } 

对于Swift 3.0,你将需要这个:

 func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult){ switch result.rawValue { case MessageComposeResult.sent.rawValue: print("sent") break case MessageComposeResult.cancelled.rawValue: print("cancelled") break case MessageComposeResult.failed.rawValue: print("failed") break default: break } self.dismiss(animated: true) { () -> Void in } } @IBAction func sentSMSAction(_ sender: AnyObject) { if MFMessageComposeViewController.canSendText() { let messageVC = MFMessageComposeViewController() messageVC.body = "My first custom SMS"; messageVC.recipients = ["0123456789"] messageVC.messageComposeDelegate = self; self.present(messageVC, animated: false, completion: nil) } }