MFMessageComposeViewController在Swift中初始化

时间:2014-10-21 18:08:21

标签: ios swift sms init messages

我目前正在开发一个应用程序,我希望能够发送短信以确认用户是否有他们发送的号码。然后我做一些后端工作并查询服务器以查看该数字是否已经过验证。

唯一的问题是我无法发送短信。我能找到的唯一在线教程和文档是Objective-C。

我已尽最大努力复制它,但有一部分我找不到Swift等同物。 " init"。

func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {

    if (result.value == MessageComposeResultCancelled.value) {
        NSLog("Message was cancelled.");
    }
    else if (result.value == MessageComposeResultFailed.value) {
        var warningAlert : UIAlertView = UIAlertView.alloc();
        warningAlert.title = "Error";
        warningAlert.message = "Failed to send SMS!";
        warningAlert.delegate = nil;
        warningAlert.show();
        NSLog("Message failed.");
    } else {
        NSLog("Message was sent.");
    }
    self.dismissViewControllerAnimated(true, completion: nil);
}

func showSMS() {
    if (!MFMessageComposeViewController.canSendText()) {
        var warningAlert : UIAlertView = UIAlertView.alloc();
        warningAlert.title = "Error";
        warningAlert.message = "Your device does not support SMS.";
        warningAlert.delegate = nil;
        warningAlert.show();
        return;
    }

    var recipients : NSArray = ["1234567890"];
    var message : NSString = "Message.";


    // This is the problem line I think....
    let messageController : MFMessageComposeViewController = MFMessageComposeViewController.alloc();

    /* In Objective-C it is: */
    // MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];

    // I have also tried this...
    let messageC : MFMessageComposeViewController! = MFMessageComposeViewController();


    messageController.messageComposeDelegate = self;
    messageController.recipients = recipients;
    messageController.body = message;

    self.presentViewController(messageController, animated: true, completion: nil);
}

我认为问题在于,当我运行它时,MFMessageComposeViewController没有完全实例化。因此,当它命中此代码时,屏幕只会变黑,而不是打开消息对话框。我发现当在Objective-C中没有初始化同一行时,这就是问题。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你是对的。它永远不会init - 编辑 - 因为你永远不会init - 它。您正在调用alloc,这是错误的。

从不在Swift中调用alloc。嗯,你可能,但通常不是。刚刚初始化。像这样:

let messageController = MFMailComposeViewController()

实际上是对init的调用,这正是你想要的。

(你可能想停下来阅读Swift语言以及它如何进一步调用初始化程序,因为你在代码中的任何地方显然都是完全错误的。)

答案 1 :(得分:0)

在斯威夫特, 初始化:

 let smsComposer:MFMessageComposeViewController = MFMessageComposeViewController()

不要忘记设置委托:

  smsComposer.messageComposeDelegate = self

Objective -c Repo

Swift Repo

Apple docs