2017-02-17 3 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

Unrelated от почему вы звоните 'configuredMailComposeViewController' перед вызовом' если MFMailComposeViewController.canSendMail() '? – rmaddy

+0

@john, как вы думаете, что это значит? 'MFMailComposeViewController()' – aircraft

ответ

1
func configuredMailComposeViewController() -> MFMailComposeViewController 

Это здесь ваша функция, которая имеет тип возвращаемого MFMailComposeViewController, который вы будете получите, когда вы вызовете этот метод. Он вернет вам результат

Теперь результат вашего метода func configuredMailComposeViewController() -> MFMailComposeViewControllercall должен быть сохранен в переменной, которую вы просто не можете оставить в полете. Чтобы сохранить или получить какой-либо этот метод, вам нужно это сделать:

var mailComposeViewController = configuredMailComposeViewController() 

Так что это дает понять, что вам нужно это назвать mailComposeViewController = configuredMailComposeViewController() после возвращения функции не раньше.

Ровно this-:

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 = configureMailComposeViewController()' внутри '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

Смежные вопросы