MFMailComposeViewController,Swift 4,Xcode 9

问题描述 投票:2回答:3

我有MFMailComposeViewControllerDelegate函数的问题。

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true, completion: nil)
}

警告说

实例方法'mailComposeController(:didFinishWith:error :)'几乎匹配协议'MFMailComposeViewControllerDelegate'的可选要求'mailComposeController(:didFinishWith:error :)'

将'mailComposeController(_:didFinishWith:error :)'私有化以使此警告无声

我需要将用户返回到App并在单击取消后关闭MFMailComposeViewController并且不会触发此功能。

是的,我添加了代表composeVC.mailComposeDelegate = self

如果有人有类似的问题,我将不胜感激。谢谢

编辑

只有在我将语言设置为Swift 4时才会发生这种情况。我只是回过头几次提交,并且它与Swift 3.2的工作完全正常

基本上,这是代码:

class TechSupportVC: UIViewController, MFMailComposeViewControllerDelegate {
    let composeVC = MFMailComposeViewController()

override func viewDidLoad() {
    super.viewDidLoad()

    composeVC.mailComposeDelegate = self
    composeVC.setToRecipients(["[email protected]"])
    composeVC.setSubject("My message")
}

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true, completion: nil)
}

@IBAction func sendPressed(_ sender: Any) {
    guard MFMailComposeViewController.canSendMail() else {
        showMailServiceErrorAlert()
        return
    }

    composeVC.setMessageBody("Test credentials: \(firstAndLastNameTextField.text!)\nPhone: \(numberTextField.text!)\n\n\(messageTextView.text!)", isHTML: false)

    self.present(composeVC, animated: true, completion: nil)
}

}

ios swift xcode mfmailcomposeviewcontroller
3个回答
7
投票

我不可能使用Đorđe's solution,这个other answer帮助了我。

func mailComposeController(_ controller: MFMailComposeViewController,
                           didFinishWith result: MFMailComposeResult,
                           error: Swift.Error?) {
    controller.dismiss(animated: true, completion: nil)
}

Swift.前缀添加到Error?解决了这个问题。


1
投票

我有同样的问题,在取消或发送邮件后mailComposeControler代表没有被调用。 xCode给了我关于添加私有的相同警告。我没有像其他人那样有一个名为Error的枚举问题。

我能解决的唯一方法是将函数明确定义为public

public func mailComposeController(_ controller: MFMailComposeViewController,
                                  didFinishWith result: MFMailComposeResult, error: Error?) {
    // Check the result or perform other tasks.

    // Dismiss the mail compose view controller.
    self.dismiss(animated: true, completion: nil)
}

在这之后它工作得很好。

这是在Swift 4.0,xCode 10.1中。


0
投票

编辑:

在向项目添加其他类之后,我再次遇到了同样的问题,并意识到转换不是问题。

问题是我有一个名为Error的枚举,这就是为什么参数错误:没有识别Swift Error类,所以警告是正确的。

我来编辑答案,我看到Boris Y.写了这个修复,所以我会接受his answer

© www.soinside.com 2019 - 2024. All rights reserved.