I have a code that looks like so:
let myItems = presenter?.getShoppingListItems()
if myFlag.isEnabled() && myItems!.isEmpty {
//Do something
Now, I want to write this line if myFlag.isEnabled() && shoppingListItems!.isEmpty using if-let.
I tried this:
let myItems = presenter?.getShoppingListItems()
if let _ = myFlag.isEnabled(), let myItems = myItems?.isEmpty {
//Do something
And this:
let myItems = presenter?.getShoppingListItems()
if let myFlag.isEnabled(), let _ = myItems?.isEmpty {
//Do something
But it's not working. What am I missing here?
CodePudding user response:
Optional binding (if let ...) is supposed to be used when you want to unwrap an optional value and bind it to an identifier. Here, you are not trying to bind anything - you are just trying to check two conditions: myFlag.isEnabled() and myItems?.isEmpty, so a regular if condition will work.
You do need to make sure that the conditions are of type Bool though, not Bool?.
Assuming yo do not want the if statement to run when myItems is nil, you can achieve this by directly comparing the optional myItems?.isEmpty with true.
if myFlag.isEnabled() && myItems?.isEmpty == true {
Alternatively, you can mix optional binding with regular Bool conditions. You can bind myItems, and check isEnabled and isEmpty, all within the same if statement:
if let myItems = presenter?.getShoppingListItems(),
myFlag.isEnabled(), myItems.isEmpty == true {
}
Or you can bind on myItems?.isEmpty, since that is an optional as well:
if let isEmpty = myItems?.isEmpty,
myFlag.isEnabled(), isEmpty {
}
If you want the if statement to also be executed when myItems is nil, you can change the condition to != false:
if myFlag.isEnabled() && myItems?.isEmpty != false {
CodePudding user response:
You can try
if let items = presenter?.getShoppingListItems(), items.isEmpty, myFlag.isEnabled() { ... }
