如何在不使用"的情况下展开textfield.text ! " - 斯威夫特3

时间:2017-03-30 16:23:07

标签: ios swift uitextfield uitextfielddelegate

我一直在搜索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
}

1 个答案:

答案 0 :(得分:-2)

如果您确定已经定义了变量,则可以始终展开变量,如果尚未定义该字段,则可能需要采取不同的操作

var someVariableWithWideScope : String = ""

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

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

let someVariable = myTextField.text ?? "default"

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