我收到错误:-// 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