MFMailComposeViewController,Swift 4,Xcode 9

我有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并且不会触发此function。

是的,我添加了委托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) } 

}

我无法应用Đorđe的解决方案,这个其他答案对我有帮助。

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

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

显然,问题出现在Xcode完成从Swift 3.2到Swift 4的转换之后。我只能假设在这个自动转换期间,Xcode以某种方式设法“破坏”MessageUI Framework。 我确实恢复了这一步(通过Bitbucket)并手动进行了转换:

  • 项目>目标>构建设置>将Swift编译器 – 语言设置为Swift 4.0
  • 建立项目
  • 在需要时用Swift 4语法替换Swift 3.2代码

当我完成后,MFMailComposeViewControllerDelegate按预期工作。

我很感谢Krunal的帮助,他们已经准备好帮助了。

编辑:

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

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

我来编辑答案,我看到Boris Y.为此写了解决方案,所以我会接受他的回答 。