Reputation: 111
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 of the text field.
class ViewController: UIViewController {
@IBOutlet weak var textLabel: UILabel!
@IBOutlet weak var textField: UITextField!
@IBAction func updateButton(sender: UIButton) {
textLabel.text = "Hi \(textField.text) "
}
The result is
Hi Optional("TextOfTextField")
Okay. So it's a very simple question.
I hope someone can help me.
Upvotes: 1
Views: 14382
Reputation: 897
Using (if let) or (guard let) you can unwrap the value
if let text = textField.text {
textField.text = "Hi \(text)"
}
guard let text = textField.text else { return }
textField.text = "Hi \(text)"
Upvotes: -1
Reputation: 7996
In my case for Swift 4.x, I unwrapped by using below command for option Int? values or Optional list cont:
\(topics?.count ?? 0 )
Upvotes: 0
Reputation: 28892
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:
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 ?? "?")"
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)"
}
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 :)
Upvotes: 12
Reputation: 1783
I solved this problem with this for Swift 3;
self.label.text = "\(transaction.amount!)"
Upvotes: -2
Reputation: 888
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.
Upvotes: 1
Reputation: 3155
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
}
Upvotes: 14