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
I solved this problem with this for Swift 3;
self.label.text = "\(transaction.amount!)"
Just add an !
exclamation mark to textField.text
like following:
@IBAction func updateButton(sender: UIButton) {
textLabel.text = "Hi \(textField.text!) "
}
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.
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 :)
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
}
In my case for Swift 4.x, I unwrapped by using below command for option Int? values or Optional list cont:
\(topics?.count ?? 0 )