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

时间:2015-11-29 18:21:18

标签: ios string 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) "
    }

结果是

  

Hi可选(“TextOfTextField”)

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

我希望有人可以帮助我。

enter image description here

6 个答案:

答案 0 :(得分:13)

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

if let text: String = textField.text {
   textLabel.text = text
}

答案 1 :(得分:9)

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

只需将!添加到textField.text,就像这样:

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

您的输出现在为Hi TextOfTextField

您可以使用一些更安全的选项来解开您的选项:

  1. 无合并运营商:??
    这将使用textField.text,或者,如果为零,则使用提供的其他值,在这种情况下为"?"

    textLabel.text = "Hi \(textField.text ?? "?")"
    
  2. if let声明:
    请注意,这只会更新文本字段的文本,如果它不是nil。您可以提供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)"
    
  4. 希望这会有所帮助:)

答案 2 :(得分:1)

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

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

使用警卫可确保您的应用在条件失败时提前失败。

答案 3 :(得分:0)

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

\(topics?.count ?? 0 )

答案 4 :(得分:-1)

这只是一个简单的使用Swift你可以设置1个按钮,当它点击我的textfeild文本设置为Lable时使用 Swift 3

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

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

答案 5 :(得分:-2)

我用 Swift 3 ;

解决了这个问题
self.label.text = "\(transaction.amount!)"