我有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)
}
}
我不可能使用Đorđe's solution,这个other answer帮助了我。
func mailComposeController(_ controller: MFMailComposeViewController,
didFinishWith result: MFMailComposeResult,
error: Swift.Error?) {
controller.dismiss(animated: true, completion: nil)
}
将Swift.
前缀添加到Error?
解决了这个问题。
我有同样的问题,在取消或发送邮件后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中。
编辑:
在向项目添加其他类之后,我再次遇到了同样的问题,并意识到转换不是问题。
问题是我有一个名为Error的枚举,这就是为什么参数错误:没有识别Swift Error类,所以警告是正确的。
我来编辑答案,我看到Boris Y.写了这个修复,所以我会接受his answer。