MFMailComposeViewController,Swift 4,Xcode 9

Đor*_*vić 3 xcode ios swift mfmailcomposeviewcontroller

我有MFMailComposeViewControllerDelegate函数的问题.

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

警告说

实例方法'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(["desiredEmail@gmail.com"])
    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)
}
Run Code Online (Sandbox Code Playgroud)

}

Bor*_* Y. 9

我不可能应用Đorđe的解决方案,这个其他答案对我有帮助.

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

添加Swift.前缀以Error?解决问题.