8
votes

xcode 6 beta 4 - messagecomposeresult n'est pas convertible à la facultativeNilComParisonStType

Je viens de passer à partir de xcode 6 beta 3 en version bêta 4. Dans 3 mon application compilait parfaitement la compilation parfaitement dans 4, j'ai l'erreur suivante. Quelqu'un peut-il expliquer et fournir une solution s'il vous plaît.

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()

}


7 commentaires

S'il vous plaît fournir où est défini le messagecomposerSententant


@AlBlue: qui est défini dans le frameworks MessageUi, voir développeur.apple.com/library/prerelease/ios/documentation/... .


Déjà discuté ici

4 Réponses :


3
votes

C'est un bogue dans la manière dont ce module est ponté à Swift. Signaler cela. Pour utiliser le module, restez dans Objective-C jusqu'à ce que le bogue de pontage SWIFT soit corrigé.

La partie principale du bogue tel qu'il se trouve me semble être:

  • Cela devrait être un énumé, et ce n'est pas; C'est une structure

  • la struct a une valeur , qui doit être capable de comparaison, mais il n'a pas de getter (vous pouvez la définir lors de l'initialisation, mais vous ne pouvez pas l'obtenir plus tard)


0 commentaires

22
votes
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("")

    }

}

2 commentaires

Ajouter .Value corrigé mon problème aussi.


Dans Swift 2, résultat.Value n'existe pas.



3
votes

pour Swift 2 fort>, vous devrez utiliser RAWVALUE CODE>:

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


0 commentaires

1
votes

Pour SWIFT 3.0, vous aurez besoin de cela:

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)
    }

}


0 commentaires