MFMailComposeViewController init没有参数

时间:2016-12-28 11:49:41

标签: ios swift mfmailcomposeviewcontroller

我正在尝试在Swift中创建以下扩展名:

    extension MFMailComposeViewController {

      convenience init(document: Document) {
        self.init()

        // do some configuration...
        setMessageBody("BlaBlaBla", isHTML: false)
      }

    }

但是我无法编译:

  

无法调用没有参数的“MFMailComposeViewController.init”

这对我来说很奇怪,因为MFMailComposeViewController肯定有一个没有参数的初始化。

非常感谢任何有关如何解决此问题的帮助。

2 个答案:

答案 0 :(得分:1)

使用super.init()代替self.init()和自我扩展

答案 1 :(得分:-1)

您收到错误的原因是,如果您在设备或模拟器上运行应用程序而未检查canSendMail方法,则会通过使用空参数(默认的init方法)启动它来获取nil对象。

extension MFMailComposeViewController {

    convenience init?(document: UIImage) {

        guard MFMailComposeViewController.canSendMail() else { return nil }

        self.init()
        // continue setup the controller


    }

}

您可以在模拟器上测试此项,而无需通过以下代码设置任何电子邮件帐户:

class FirstViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let controller: MFMailComposeViewController? = MFMailComposeViewController()
        guard let mail = controller else { return }
        present(mail, animated: true, completion: nil)
    }

}