【问题标题】:How to unwrap textfield.text without using the " ! " - Swift 3如何在不使用“!”的情况下解开 textfield.text - Swift 3
【发布时间】:2017-03-30 16:23:07
【问题描述】:

我一直在搜索 stackoverflow,想知道最好的做法是在不强制解包的情况下解开 textfield.text 可选。它可以这样做,但我被告知永远不要强制打开包装。但是当我将 textfield.text 分配给某个东西时,我只是传递了可选字符串。有人可以解释什么最适合这个吗?谢谢!

编辑:

    func configuredMailComposeViewController() -> MFMailComposeViewController {

    let passTextField = TextField.text

    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self 

    mailComposerVC.setToRecipients(["email@email.com"])
    mailComposerVC.setSubject(passTextField!)
    mailComposerVC.setMessageBody("Some Text", isHTML: false)

    return mailComposerVC
}

我正在尝试传递文本字段文本并将其传递给电子邮件主题。强制展开不会导致错误,但我想知道传递此字符串的最佳做法是什么

编辑2:

 func configuredMailComposeViewController() -> MFMailComposeViewController {

    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self 

    mailComposerVC.setToRecipients(["email@email.com"])
        if let passTextField = textfield.text {
           mailComposerVC.setSubject(passTextField)
         }
    mailComposerVC.setMessageBody("Some Text", isHTML: false)

    return mailComposerVC
}

【问题讨论】:

  • 搜索“可选绑定”(if let)。阅读 Swift 书中的 Optionals 部分。事实上,你应该阅读整本书。
  • 我支持这个想法。阅读语言指南。
  • 我想这是我不理解的。我作曲 | if let someVariable = textfield.text {//statements} |我试图做的声明是分配 someVariable 字符串。然而,当我在陈述部分重申这一点时,我得到了一个错误。或者,如果我将语句部分留空,当我想使用它时它就无法识别标识符。
  • @HubertMane 请edit您的问题包括(作为文本,而不是图片)您尝试使用的实际代码,并清楚地指出确切的错误消息以及它们发生的位置。
  • 您的第二次编辑是正确的。但是您之前的评论声称您遇到了错误。由于您的第二次编辑是正确的方法,您的问题有什么意义?

标签: ios swift uitextfield uitextfielddelegate


【解决方案1】:

如果您确定变量已被定义,您总是可以解包,如果该字段尚未定义,您可能需要采取不同的操作

var someVariableWithWideScope : String = ""

if myTextField.text != nil {
    someVariableWithWideScope = myTextField.text!
} else {
    // do something specific for nil values
}

当然,如果你要为 nil 做的只是分配一个默认值,你可以按照其他地方的讨论一步一步完成

let someVariable = myTextField.text ?? "default"

但这种方法不允许您更改执行流程

【讨论】:

  • 这仍在强制展开。为什么不将所有代码放在一行中:let someVariableWithWideScope = myTextField.text ?? ""
  • 只是因为有时你想在值仍然为零时采取不同的行动
猜你喜欢
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 2015-06-29
  • 2015-08-26
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多