2017-02-17 96 views
0

我试图以允许用户在我的应用程序发送电子邮件,但我得到一个:它的声明之前局部变量声明迅速

使用局部变量“configureMailComposeViewController”的

这是代码。

func item(_ item: Int, selectedAtContactIndex index: Int) { 
    var mailComposeViewController = configuredMailComposeViewController() 
    if MFMailComposeViewController.canSendMail() { 
     self.presentViewController(mailComposeViewController, animated: true, completion: nil) 
    } else { 

    } 
} 

func configuredMailComposeViewController() -> MFMailComposeViewController{ 
    let mailComposerVC = MFMailComposeViewController() 
    mailComposerVC.mailComposeDelegate = self 

    mailComposerVC.setToRecipients([EmailAddressArray[index]]) 
    mailComposerVC.setSubject("I need your help") 

    return mailComposerVC 
} 

Image of the Error

+1

无关的,为什么你叫'configuredMailComposeViewController'之前你叫'如果MFMailComposeViewController.canSendMail()'? – rmaddy

+0

@john,你认为这是什么意思? 'MFMailComposeViewController()' – aircraft

回答

1
func configuredMailComposeViewController() -> MFMailComposeViewController 

这里这个权利是你的函数具有返回类型MFMailComposeViewController,你会得到你什么时候会调用这个方法。它会给你返回一些结果

现在您的上述方法func configuredMailComposeViewController() -> MFMailComposeViewControllercall的结果需要保存在一个变量中,您不能让它在空中飞行。为了保存或获取此方法,您需要执行以下操作 - :

var mailComposeViewController = configuredMailComposeViewController() 

所以这清楚你不必在你的回报功能后,调用此mailComposeViewController = configuredMailComposeViewController()

正是这个 - :

func configuredMailComposeViewController() -> MFMailComposeViewController{ 
     let mailComposerVC = MFMailComposeViewController() 
     mailComposerVC.mailComposeDelegate = self 

     mailComposerVC.setToRecipients([EmailAddressArray[index]]) 
     mailComposerVC.setSubject("I need your help") 

     return mailComposerVC 
    } 





     func item(_ item: Int, selectedAtContactIndex index: Int) { 

     if MFMailComposeViewController.canSendMail() { 
var mailComposeViewController = configuredMailComposeViewController() 
      self.presentViewController(mailComposeViewController, animated: true, completion: nil) 
     } else { 

     } 
    } 
+1

你真的应该招行'VAR mailComposeViewController = configuredMailComposeViewController()'里面的'if'语句。如果您无法发送电子邮件,则创建邮件编辑器是没有意义的。 – rmaddy

0

切换的功能的顺序,把configuredMailComposeViewController功能之上

func configuredMailComposeViewController() -> MFMailComposeViewController{ 
    let mailComposerVC = MFMailComposeViewController() 
    mailComposerVC.mailComposeDelegate = self 

    mailComposerVC.setToRecipients([EmailAddressArray[index]]) 
    mailComposerVC.setSubject("I need your help") 

    return mailComposerVC 
} 





    func item(_ item: Int, selectedAtContactIndex index: Int) { 
    var mailComposeViewController = configuredMailComposeViewController() 
    if MFMailComposeViewController.canSendMail() { 
     self.presentViewController(mailComposeViewController, animated: true, completion: nil) 
    } else { 

    } 
} 
+0

我很困惑,你可以让编辑告诉我你谈论 – john

+0

我已经编辑我的回答显示了如何 – inzo