2016-12-28 72 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) 
    } 

}