1

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

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

    @IBAction func updateButton(sender: UIButton) {
        textLabel.text = "Hi \(textField.text) "
    }

结果是

嗨可选(“TextOfTextField”)

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

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

在此处输入图像描述

4

6 回答 6

14

textField 的文本可选值,因为文本字段有时可能为空。所以,使用 anif let来解包变量确保它不是 nil ——否则你的程序可能会崩溃:

if let text: String = textField.text {
   textLabel.text = text
}
于 2015-11-29T18:35:16.313 回答
12

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

只需像这样!添加:textField.text

textLabel.text = "Hi \(textField.text!)"

您的输出现在将是Hi TextOfTextField


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

  1. nil 合并运算符:??
    这将使用textField.text,或者,如果它是 nil,则使用提供的其他值,"?"在这种情况下

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

    if let text = textField.text {
        textField.text = "Hi \(text)"
    }
    
  3. guard let语句:
    这与语句类似if let,只是您的函数将在语句之后结束。

    guard let text = textField.text else { return }
    textField.text = "Hi \(text)"
    

希望这可以帮助 :)

于 2015-11-29T18:27:35.303 回答
1

另一种方法是使用 Guard 检查它是否不为零。

guard let nameText = textField.text else {
    print("break if nil")
    return
}
textLabel.text = "Hi \(nameText!)" 

如果条件失败,使用 guard 可确保您的应用程序及早失败。

于 2017-10-03T10:19:01.843 回答
0

就我的 Swift 4.x 而言,我通过使用以下命令来打开选项 Int? 值或可选列表续:

\(topics?.count ?? 0 )
于 2019-09-12T20:35:29.950 回答
-1

使用 (if let) 或 (guard let) 你可以解开值

if let text = textField.text {
    textField.text = "Hi \(text)"
}

guard let text = textField.text else { return }
textField.text = "Hi \(text)"
于 2017-09-14T10:58:27.767 回答
-2

我为Swift 3解决了这个问题;

self.label.text = "\(transaction.amount!)"
于 2017-11-20T13:38:26.227 回答