首页 > 解决方案 > 有什么方法可以创建电子邮件的常用方法(例如:- 在应用程序中联系我们)

问题描述

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

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

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

extension UIViewController { 

func contactUs() {

    if MFMailComposeViewController.canSendMail() {

        mc.mailComposeDelegate = self

                    if let name = CurrentUser.name, let phoneNo = CurrentUser.phone {
                        mc.setMessageBody("\n\n\nThanks & Regards\n\(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)
  }
}

标签: iosswiftswift4

解决方案


嗨,Vipul,您遇到错误是因为在您的代码中您将 viewcontroller 分配给 self 所以您需要做的是对该控制器进行类型转换

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


推荐阅读