Adding forEach() to Swift Arrays
Ben
I’ve been working on a small project in Swift recently. It’s been both fun and amazingly frustrating at turns. Moving from a language which I’ve been using for 13+ years to one that I’ve only known about for 3 months is hard.
One of the things I’m not used to yet is a base object set that isn’t as full featured as Foundation’s. This isn’t a nock against Swift, just an obvious difference that I think will change with time. Swift has also been built such that it’s quite a bit easier and more acceptable to add basic functionality to these standard library types. However, for me always remembering that I can do this is the trick.
Today I was wanting the functionality provided by NSArray’s -makeObjectsPerformSelector:
method. I could have just briged the Swift array I was working with into an NSArray and called the method, but I felt like it might be nice to try extending Array
instead. This is what I came up with:
extension Array {
func forEach(doThis: (element: T) -> Void) {
for e in self {
doThis(element: e)
}
}
}
Wow. That was easy! Code to use it simply looks like:
someArray.forEach { element in
// do something with the element
}
Being able to make this kind of simple extension to a low level type and having it just work makes me a little more open to the idea of Generics invading our little corner of the software development world.