我遇到MFMailComposeViewControllerDelegate函数问题。
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
警告说
实例方法' mailComposeController(:didFinishWith:error :)'几乎匹配可选要求' mailComposeController(:didFinishWith:error :)'协议' MFMailComposeViewControllerDelegate'
制作' mailComposeController(_:didFinishWith:错误:)'私下沉默这个警告
我需要将用户返回到应用程序并在单击取消后关闭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)
}
}
答案 0 :(得分: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 :(得分: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。
答案 2 :(得分:0)
修改强>
在项目中添加其他类后,我又遇到了同样的问题,并意识到转换不是问题。
问题是我有一个名为Error的枚举,这就是为什么参数错误:没有识别Swift Error类,所以警告是正确的。
我来编辑答案,我看到Boris Y.为此写了解决方案,所以我会接受his answer。