我正在尝试在Swift中创建以下扩展名:
extension MFMailComposeViewController {
convenience init(document: Document) {
self.init()
// do some configuration...
setMessageBody("BlaBlaBla", isHTML: false)
}
}
但是,我无法将其编译为:
无法调用没有参数的'mfmailcomposeviewcontroller.init'
对我来说似乎很奇怪,因为MFMailComposeViewController
肯定有一个没有参数的初始评估器。
关于如何解决此问题的任何帮助将不胜感激。
用于sublcassing使用 super.init()
而不是 self.init()
,而用于扩展为self
出现错误的原因是,如果您在设备或模拟器上运行该应用而不检查CanSendMail方法,则会通过使用空参数启动nil
对象(默认INIT MATECT)。
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)
}
}