【问题标题】:MFMailComposeViewController init no argumentsMFMailComposeViewController 初始化无参数
【发布时间】:2016-12-28 11:49:40
【问题描述】:

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

    extension MFMailComposeViewController {

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

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

    }

但是我无法编译:

无法在没有参数的情况下调用“MFMailComposeViewController.init”

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

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

【问题讨论】:

    标签: ios swift mfmailcomposeviewcontroller


    【解决方案1】:

    对于 sublcasing 使用 super.init() 而不是 self.init() 和扩展 self

    【讨论】:

    • 这是一个令人信服的初始化程序,因此使用 super 给了我:“'MFMailComposeViewController' 的便利初始化程序必须委托(使用 'self.init')而不是链接到超类初始化程序(使用 'super.init' )”。这是预期的......
    • import MessageUI class Document { var name : String? } extension MFMailComposeViewController { 便利 init(document: Document) { self.init() // 做一些配置... setMessageBody("BlaBlaBla", isHTML: false) } }
    【解决方案2】:

    您收到错误的原因是如果您在设备或模拟器上运行应用程序而不检查 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)
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多