2016-12-28 60 views
0

我想要创建斯威夫特以下扩展名:MFMailComposeViewController初始化没有参数

extension MFMailComposeViewController { 

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

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

    } 

但是我不能够得到这个编译:

不能援引“MFMailComposeViewController.init”没有论据

这似乎很奇怪,因为MFMailComposeViewController肯定有一个没有参数的初始化程序。

有关如何解决此问题的任何帮助将不胜感激。

回答

1

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

+0

这是一个说服初始化器,以便使用超给我:“为‘MFMailComposeViewController’必须便利初始化委托(与'self.init'),而不是链接到超类初始值设定项(与'super.init')“。预计... –

+0

刚刚检查你的代码在我的结尾。它正在工作 – Saad

+0

import消息UI class文档 { var name:String? } 延伸MFMailComposeViewController { 方便的init(文献:文献){ self.init() //做一些配置... setMessageBody( “BlaBlaBla”,isHTML:假) } } – Saad

-1

如果您运行的设备或模拟器上的应用程序没有检查canSendMail方法,你得到了错误的原因是,你会通过启动它得到一个nil对象带有空参数(默认的init方法)。

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) 
    } 

}