为什么是可选("文本") - 斯威夫特

Dan*_*SDE 0 string optional ios optional-values swift

我刚开始使用Swift.所以我创建了一个带有标签,按钮和文本字段的简单应用程序.单击该按钮时,应用程序必须使用文本字段的文本更改标签.

class ViewController: UIViewController {
    @IBOutlet weak var textLabel: UILabel!
    @IBOutlet weak var textField: UITextField!

    @IBAction func updateButton(sender: UIButton) {
        textLabel.text = "Hi \(textField.text) "
    }
Run Code Online (Sandbox Code Playgroud)

结果是

嗨可选("TextOfTextField")

好的.所以这是一个非常简单的问题.

我希望有一个人可以帮助我.

在此输入图像描述

Elm*_*Cat 13

textField的文本可选值,因为文本字段有时可能为空.因此,使用an if let来解包变量确保它不是零 - 否则你的程序可能会崩溃:

if let text: String = textField.text {
   textLabel.text = text
}
Run Code Online (Sandbox Code Playgroud)


Lin*_*rth 10

所以这里的问题是textField的文本是可选的,你必须打开才能使用它.

只需添加一个!textField.text这样的:

textLabel.text = "Hi \(textField.text!)"
Run Code Online (Sandbox Code Playgroud)

你的输出现在是 Hi TextOfTextField


您有一些更安全的选项来打开您的选项:

  1. nil coalescing operator:??
    这将使用textField.text,或者,如果没有,则使用提供的其他值,"?"在这种情况下

    textLabel.text = "Hi \(textField.text ?? "?")"
    
    Run Code Online (Sandbox Code Playgroud)
  2. if let声明:
    请注意,这只会更新文本字段的文本,如果它不是nil.你可以提供一个else声明来处理这个问题.

    if let text = textField.text {
        textField.text = "Hi \(text)"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. guard let声明:除了你的函数将在语句后结束时,
    它的工作方式与if let语句类似.

    guard let text = textField.text else { return }
    textField.text = "Hi \(text)"
    
    Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)