有没有办法创建一个通用的电子邮件方法(例如:- 在应用程序中与我们联系)



我收到错误:-// Cannot assign value of type 'UIViewController' to type 'MFMailComposeViewControllerDelegate?' //

如果我没有分配委托,那么在消息VC中单击取消后我将无法返回。

请参阅此代码:- 现在我正在做这样的事情:-

extension UIViewController { 
func contactUs() {
if MFMailComposeViewController.canSendMail() {
mc.mailComposeDelegate = self
if let name = CurrentUser.name, let phoneNo = CurrentUser.phone {
mc.setMessageBody("nnnThanks & Regardsn(name)n(phoneNo)", isHTML: false)
}
mc.setSubject(emailTitle)
mc.setToRecipients(toRecipents)
self.present(mc, animated: true, completion: nil)      
}
}
}

extension ViewController:  MFMailComposeViewControllerDelegate {
func mailComposeController(_ controller:MFMailComposeViewController, didFinishWith result:MFMailComposeResult, error:Error?) {
switch result {
case .cancelled:
print_debug("Mail cancelled")
case .saved:
print_debug("Mail saved")
case .sent:
print_debug("Mail sent")
case .failed:
print_debug("Mail sent failure: (error?.localizedDescription ?? "Mail not sent")")
default:
break
}
self.dismiss(animated: true, completion: nil)
}
}

嗨,Vipul 您收到错误,因为在您的代码中您将视图控制器分配给自身,所以您需要做的是将该控制器类型化

mc.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate

这将解决您的问题,我还建议您像这样为 MFMailComposeViewControllerDelegate 提供默认实现

import MessageUI
extension MFMailComposeViewControllerDelegate {
public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?){
switch result {
case .cancelled:
print_debug("Mail cancelled")
case .saved:
print_debug("Mail saved")
case .sent:
print_debug("Mail sent")
case .failed:
print_debug("Mail sent failure: (error?.localizedDescription ?? "Mail not sent")")
default:
break
}
controller.dismiss(animated: true, completion: nil)
}
}

并且您不需要设置 mc.mailComposeDelegate

相关内容

最新更新