【问题标题】:send output UIDatePicker by email with swift使用 swift 通过电子邮件发送输出 UIDatePicker
【发布时间】:2019-01-30 20:56:21
【问题描述】:

我对使用 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

【问题讨论】:

  • 错误信息是什么? (把它放在你的问题中,而不是在评论中)。
  • 什么是strDate

标签: ios swift mfmailcomposeviewcontroller


【解决方案1】:

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

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

您在datumTIjd(_ sender: ) 中创建strDate,这是一个将strDate 捕获在其大括号内的函数。函数之外的任何东西都不知道strDate 的存在。由于您在 datumTIjd(_ sender: ) 的最后一行创建 strDate 并且从不使用它,编译器可能会对其进行优化(如果它没有 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 从它当前所在的函数范围移动到类的范围内,从而允许类中的任何方法访问它,从而清除您当前的错误。

【讨论】:

    【解决方案2】:
    • 您收到此错误是因为 strDate 变量的范围受限于 datumTIjd 函数,因为它是局部变量。因此,您只需将其设为全局,以便您可以在 configuredMailComposeViewController() 函数中访问它。

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

    • 声明 strDate 您声明电子邮件变量的位置为: var strDate:String = ""

    • 现在更改您的 datumTIjd 操作:

    修改这一行 - let strDate = dateFormatter.string(from: mijnDatumTijd.date) 作为

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

    【讨论】:

    • 感谢您的帮助!错误现已解决。当我尝试启动应用程序时,我得到了下一个错误。我试图清理我的项目,但没有帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-11-01
    • 2014-04-13
    • 1970-01-01
    • 2015-12-02
    • 2018-04-08
    • 2017-06-26
    • 2011-03-07
    • 2011-06-08
    相关资源
    最近更新 更多