Binary operator '<' cannot be applied to two 'Int?' operands
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.
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:
1: If let
if let goalOne = Int(someString) {
// do something with goalOne
}
2: Guard let
guard let goalOne = Int(someString) else {
// either return or throw an error
}
// do something with goalOne
3: map
and/or flatMap
let someValue = Int(someString).map { goalOne in
// do something with goalOne and return a value
}
4: Provide a default 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.