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