我正在尝试在Swift中创建以下扩展名:
extension MFMailComposeViewController {
convenience init(document: Document) {
self.init()
// do some configuration...
setMessageBody("BlaBlaBla", isHTML: false)
}
}
但是我无法编译:
无法调用没有参数的“MFMailComposeViewController.init”
这对我来说很奇怪,因为MFMailComposeViewController
肯定有一个没有参数的初始化。
非常感谢任何有关如何解决此问题的帮助。
答案 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)
}
}