Why is Optional(“Text”) - Swift

后端 未结 6 1012
我寻月下人不归
我寻月下人不归 2020-12-11 13:51

I just started with Swift. So I created a simple application with a label, button and a text field. When you click the button, the app has to change the label with the text

相关标签:
6条回答
  • 2020-12-11 14:19

    I solved this problem with this for Swift 3;

    self.label.text = "\(transaction.amount!)"
    
    0 讨论(0)
  • 2020-12-11 14:20

    Just add an ! exclamation mark to textField.text like following:

    @IBAction func updateButton(sender: UIButton) {
        textLabel.text = "Hi \(textField.text!) "
    }
    
    0 讨论(0)
  • 2020-12-11 14:35

    One more way can be to use Guard to check if it is not nil.

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

    Using guard makes sure your app fails early if the condition fails.

    0 讨论(0)
  • 2020-12-11 14:38

    So the problem here is that the textField's text is an optional, that you have to unwrap for using it.

    Just add an ! to textField.text like this:

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

    Your output will now be Hi TextOfTextField


    You have a few safer options to unwrap your optionals:

    1. nil coalescing operator: ??
      This will use either textField.text, or, if that's nil, use the other value provided, "?" in this case

      textLabel.text = "Hi \(textField.text ?? "?")"
      
    2. if let statement:
      Note that this will only update your text field's text, if it's not nil. You could provide an else statement to deal with that.

      if let text = textField.text {
          textField.text = "Hi \(text)"
      }
      
    3. guard let statement:
      This works similarly like the if let statement, except that your function will end after the statement.

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

    Hope this helps :)

    0 讨论(0)
  • 2020-12-11 14:43

    The text of your textField is an optional value because a text field can sometimes be empty. So, use an if let to unwrap the variable and make sure it's not nil — otherwise your program could crash:

    if let text: String = textField.text {
       textLabel.text = text
    }
    
    0 讨论(0)
  • 2020-12-11 14:44

    In my case for Swift 4.x, I unwrapped by using below command for option Int? values or Optional list cont:

    \(topics?.count ?? 0 )
    
    0 讨论(0)
提交回复
热议问题