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.为此写了解决方案,所以我会接受他的回答 。