Ios MFMailComposeViewController,Swift 4,Xcode 9
我对MFMailComposeViewControllerDelegate函数有问题Ios MFMailComposeViewController,Swift 4,Xcode 9,ios,swift,xcode,mfmailcomposeviewcontroller,Ios,Swift,Xcode,Mfmailcomposeviewcontroller,我对MFMailComposeViewControllerDelegate函数有问题 func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { controller.dismiss(animated: true, completion: nil) } 警告说 实例方法“mailCompo
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
警告说
实例方法“mailComposeController(:didFinishWith:error:)”几乎与协议“MFMailComposeViewControllerDelegate”的可选要求“mailComposeController(:didFinishWith:error:)”匹配
将“mailComposeController(ux0:didFinishWith:error:)”设为私有以使此警告静音
我需要将用户返回应用程序,并在单击“取消”后关闭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)
}
}编辑:
在向项目中添加其他类之后,我再次遇到同样的问题,并意识到转换不是问题所在
问题是我有一个名为Error的枚举,这就是为什么参数Error:无法识别Swift Error类,因此警告是正确的
我是来编辑答案的,我看到有人为此编写了修复程序,所以我接受。我不可能应用它
func mailComposeController(_ controller: MFMailComposeViewController,
didFinishWith result: MFMailComposeResult,
error: Swift.Error?) {
controller.dismiss(animated: true, completion: nil)
}
将
Swift.
前缀添加到错误?
解决了这个问题。我遇到了同样的问题,在取消或发送邮件后,mailComposeControler
代理没有被呼叫。xCode在添加private时也给了我同样的警告。我没有像其他人那样遇到名为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中实现的。尝试删除该函数,开始键入,然后让xCode自动完成。@我已经完成了,这是我得到的唯一一个自动完成。@eNilović我在xCode 9.3 beta2和Swift 4中测试了您的代码。它工作正常,没有任何错误或警告信息。代码没有问题。删除MessageUI框架并再次添加到项目中。@Krunal我刚刚检查了一个新项目,它也在工作。我确实重置了Xcode在转换到Swift 4时所做的更改,并且是手动完成的。现在它开始工作了。老实说,我不知道发生了什么,我只能怀疑Xcode转换“损坏”了MessageUI框架。谢谢你的时间和建议@Đ或đeNilović回答您的问题,并说明您为解决此问题而采取的步骤。这将有助于今后的工作。你也可以在一天后接受自己的答案。:)我只是编辑了我的答案,并描述了我这个问题的原因。感谢你花了几个小时试图弄明白这一点。使用Swift。错误修复了它!谢谢我的猜测是,根据项目的设置方式和导入的模块,其他一些名为Error的类型会影响Swift.Error类型。