“Value of optional type 'String?' not unwr

2020-07-06 03:36发布

问题:

I have not been studying iOS or Swift for very long. With one of the latest Xcode updates, many of the apps I have made on my computer now appear to be using obsolete syntax.

Xcode talks us through converting it to new syntax but often that does not solve anything and I have a new problem. Here is code for one of the first app I made after the syntax has been converted. I am getting an error saying:

Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?' ?

I know this must be really simple but I don't know how to fix it. Here is my code:

@IBAction func findAge(sender: AnyObject) {
    var enteredAge = Int(age.text)
    if enteredAge != nil {
        var catYears = enteredAge! * 7
        resultLabel.text = "Your cat is \(catYears) in cat years"
    } else {
        resultLabel.text = "Please enter a whole number"
    }
}  

回答1:

The text property of a text label is an optional, you have to unwrap it before using it.

var enteredAge = Int(age.text!)

Even better:

if let text = age.text, let enteredAge = Int(text) {
    let catYears = enteredAge * 7
    resultLabel.text = "Your cat is \(catYears) in cat years"
} else {
    resultLabel.text = "Please enter a whole number"
}


回答2:

I tried that. But it still said the same thing. I have managed to fix it now. All I did was change device the simulator was displaying in. Just by fluke it I have got it working. Maybe it was because I was creating an iOS app and the iPad required different syntax.

Thank you for your reply! It is also ways useful to know different ways to do something.