It seems like there should be a "Swiftier" way to do this - but I'm still wrapping my head around the various ways to do pattern matching in Swift.
Suppose I have an Array of AnyObject and I'd like to loop through it and if the item is an Int AND the Int is a multiple of 5, then I'd like to print it out. Here's my initial approach that works:
let myStuff: [AnyObject] = [5, "dog", 11, 15, "cat"]
for item in myStuff {
if let myInt = item as? Int where myInt % 5 == 0 {
print ("\(item)")
}
}
Honestly, that's not bad...but with all of Swift's pattern matching syntax, it seems like I should be able to consolidate the logic to 1 line. So far, I haven't found an approach that works - but I was expecting to be able to do something like:
//This doesn't work, but I feel like something similar to this should
for item in myStuff where item is Int, item % 5 == 0 {
print ("\(item)")
}
Obviously, this isn't a huge deal - but it's more a thought exercise for me to understand Swift's pattern matching a little better.
You can combine a pattern matching conditional cast with a where
clause like so:
let myStuff: [AnyObject] = [5, "dog", 11, 15, "cat"]
// item will be an Int, and divisible by 5
for case let item as Int in myStuff where item % 5 == 0 {
print(item)
}
// Prints:
// 5
// 15
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