отправить вывод UIDatePicker по электронной почте с помощью swift - PullRequest
0 голосов
/ 30 января 2019

Я действительно новичок в программировании на swift и пытаюсь создать приложение, которое отправляет дату / время из UIDatePicker на определенный адрес электронной почты.Я пытаюсь преобразовать вывод UIDatePicker в строку.Как я могу получить это в моей электронной почте?

Я получаю сообщение об ошибке "mailComposerVC.setMessageBody (strDate"

На данный момент мой код:

@IBOutlet weak var mijnDatumTijd: UIDatePicker!
@IBAction func datumTIjd(_ sender: UIDatePicker){let dateFormatter = DateFormatter()

    dateFormatter.dateStyle = DateFormatter.Style.short
    dateFormatter.timeStyle = DateFormatter.Style.short

    let strDate = dateFormatter.string(from: mijnDatumTijd.date)
}

var email: String = ""
@IBOutlet weak var Identifier: UITextField!
    @IBAction func buttonClick(sender: UIButton) {
        //getting input from Text Field
        email = Identifier.text!
    }

@IBAction func send(_ sender: UIButton) {
    _ = configuredMailComposeViewController()
    }

func configuredMailComposeViewController() -> MFMailComposeViewController {
    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate // Extremely important to set the --mailComposeDelegate-- property, NOT the --delegate-- property

    mailComposerVC.setToRecipients(["example@email.com"])
    mailComposerVC.setSubject("Sending you an in-app e-mail...")
    mailComposerVC.setMessageBody(strDate, isHTML: false)

    return mailComposerVC

Ответы [ 2 ]

0 голосов
/ 31 января 2019
  • Вы получаете эту ошибку, поскольку область действия переменной strDate ограничена внутри функции datumTIjd , поскольку она является локальной переменной.Так что вам просто нужно сделать его глобальным, чтобы вы могли получить к нему доступ в вашей сконфигурированной функции MailComposeViewController () .

  • Поэтому просто внесите изменения в свой код, как показано ниже:

  • Объявите strDate , где вы объявили переменную электронной почты как:var strDate:String = ""

  • Теперь измените ваше datumTIjd действие:

Изменить эту строку -let strDate = dateFormatter.string(from: mijnDatumTijd.date) как

self.strDate = dateFormatter.string(from: mijnDatumTijd.date)

0 голосов
/ 31 января 2019

Получаемое вами сообщение об ошибке (которое вы не перечислите, но которое может быть выведено из строки, в которой вы получили ошибку) вызвано проблемой области действия.

Переменные не могут быть доступны вне области действияони создаются в. В Swift вы почти всегда можете перевести область видимости как соответствующие фигурные скобки {}.

Вы создаете strDate в datumTIjd(_ sender: ), которая является функцией, которая захватывает strDate внутри фигурных скобок.Ничто вне функции даже не знает, strDate существует.Так как вы создаете strDate в последней строке datumTIjd(_ sender: ) и никогда не используете его, компилятор может оптимизировать его (если он не strDate, то он живет только для крошечных всплесков времени, так как все, объявленное в области видимости функции, получаетудаляется, когда функция завершена), и вы, вероятно, получите предупреждение о том, что strDate является неиспользуемой переменной.

Когда вы доберетесь до configuredMailComposeViewController() -> MFMailComposeViewController вашей ссылки strDate, однако это не входит в локальную область видимости.или любой другой более высокий объем1028 * add:

var strDate: String = "" 

Это переместит strDate из области функции, в которой он в настоящее время живет, в область класса, позволяя любому методу в классе получить к нему доступ, очистив вашу текущую ошибку.

...