This code worked just fine in Swift 2.3 and I don\'t understand why I have to unwrap TestClass
to check if number is bigger than 4. This is whole point of chain
It's not a bug. It is, alas, intentional. Implicit unwrapping of optionals in comparisons (>
) has been removed from the language.
So, the problem now is that what's on the left side of the >
is an Optional, and you can no longer compare that directly to 4
. You have to unwrap it and get an Int, one way or another.
Optional comparison operators are removed from Swift 3. SE-0121
You need to write something like this:
if test?.optionalInt ?? 0 > 4
{
}
This could also happen on Guard statement. Example:
var playerLevels = ["Harry": 25, "Steve": 28, "Bob": 0]
for (playerName, playerLevel) in playerLevels {
guard playerLevels > 0 else {//ERROR !!
print("Player \(playerName) you need to do the tutorial again !")
continue
}
print("Player \(playerName) is at Level \(playerLevels)")
}
First of all, where are you initialising your test
var? Of course it'll be nil if you don't give it a value!
And regarding optional chaining, what's the issue writing :
if let optionalInt = test?.optionalInt, optionalInt > 4
{
}
As always, safety > brevity.