Good evening lovely community,
this is my first post, please have mercy, if I do something wrong.
I know there are some similar questions here, but I doesn't understand it.
Maybe I understand, if someone explain it on my code.
// these are my two TextFields and the "finish"-Button.
@IBOutlet weak var goalPlayerOne: UITextField!
@IBOutlet weak var goalPlayerTwo: UITextField!
@IBOutlet weak var finishedGameButton: UIButton!
// here are my function, it should tell me, which Player has won like A < B, so B has won.
@IBAction func finishedGameButtonPressed(_ sender: Any) {
// define UITextField as Integer
let goalPlayerOne = "";
let goalOne = Int(goalPlayerOne);
let goalPlayerTwo = "";
let goalTwo = Int(goalPlayerTwo);
// here is the problem:
"Binary operator '<' cannot be applied to two 'Int?' operands"
// if I make a '==' it works
if goalOne < goalTwo{
displayMyAlertMessage(userMessage: "Player Two wins")
return
}
If you look at the declaration for Int
's initializer that takes a String
, you can see by the ?
after init
that it returns an optional:
convenience init?(_ description: String)
This means you have to unwrap it before you can do most things with it (==
is an exception, since the Optional
type has an overload for that operator).
There are four main ways to unwrap your optionals:
if let goalOne = Int(someString) {
// do something with goalOne
}
guard let goalOne = Int(someString) else {
// either return or throw an error
}
// do something with goalOne
map
and/or flatMap
let someValue = Int(someString).map { goalOne in
// do something with goalOne and return a value
}
let goalOne = Int(someString) ?? 0 // Or whatever the default value should be
If you unwrap all your optionals, you'll be able to compare them as you expect.
This error can also occur if you are comparing a custom type (ie: struct or class) for which you haven't implemented the Comparable protocol.
Well, by using guard statement you can check if both values are not nil, and converting it to Int typ
guard let value_one = Int(goalPlayerOne), let value_two = Int(goalPlayerTwo) else {
print("Some value is nil")
return
}
so you can safely compare two values.
if value_one < value_two {
//Do something
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With