通过电子邮件快速发送输出UIDatePicker

时间:2019-01-30 20:56:21

标签: ios swift mfmailcomposeviewcontroller

我真的是一个新手,它可以迅速进行编程,并试图构建一个将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 :(得分:0)

您收到的错误消息(未列出,但可以从发生错误的行中推断出)是由范围问题引起的。

在创建范围之外无法访问变量。在Swift中,您几乎总是可以将范围翻译为匹配的花括号{}。

您在strDate中创建datumTIjd(_ sender: ),该函数将strDate捕获在其括号内。函数外的所有对象甚至都不知道strDate的存在。由于您在strDate的最后一行创建了datumTIjd(_ sender: ),并且从不使用它,因此编译器可能会对其进行优化(如果不是strDate,那么它只会在时间上产生最细微的变化),函数作用域中声明的变量在函数完成后将被删除),并且您可能会收到警告,告诉您strDate是未使用的变量。

当您访问configuredMailComposeViewController() -> MFMailComposeViewController时,参考文献strDate不在本地范围内或更高范围内。

从以下位置丢失let

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

做到:

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

然后在行

var email: String = ""

添加:

var strDate: String = "" 

这会将strDate从当前所在函数的范围移到该类的范围,从而允许该类中的任何方法都可以访问它,从而清除当前错误。

答案 1 :(得分:0)

  • 由于 strDate 变量的作用域在 datumTIjd 函数内部受到限制,因此出现此错误,因为它是局部变量。因此,您只需要使其全局即可,以便可以在 configuredMailComposeViewController()函数中对其进行访问。

  • 所以只需对代码进行如下更改:

  • strDate 中声明电子邮件变量为:       var strDate:String = ""

  • 现在更改您的 datumTIjd 操作:

修改此行- let strDate = dateFormatter.string(from: mijnDatumTijd.date)

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