Reputation:
I have the following Dictionary:
["oct": nil,
"jan": Optional(3666.0),
"nov": nil,
"apr": nil,
"sep": nil,
"feb": nil,
"jul": nil,
"mar": nil,
"dec": nil,
"may": nil,
"jun": nil,
"aug": nil]
I want to enable a button only when any value of any key is not nil. Is there any functional "magics" to do it without a traditional loop?
Upvotes: 0
Views: 111
Reputation: 285082
I recommend to conform to the standard dictionary definition that a nil
value indicates no key and declare the dictionary non-optional ([String:Double]
).
In this case the button will be enabled if all 12 keys are present. This is more efficient than filter
or contains
button.isEnabled = dict.count == 12
Upvotes: 0
Reputation: 15758
You can use filter
to check if any value is nil in a dictionary.
button.isEnabled = dict.filter { $1 == nil }.isEmpty
Upvotes: 1
Reputation: 539795
Use contains(where:)
on the dictionary values:
// Enable button if at least one value is not nil:
button.isEnabled = dict.values.contains(where: { $0 != nil })
Or
// Enable button if no value is nil:
button.isEnabled = !dict.values.contains(where: { $0 == nil })
Upvotes: 3
Reputation:
You've already been provided with similar solutions, but here you go:
dict.filter({$0.value == nil}).count != 0
Upvotes: 1