Today I had the need to generate an infinite repeating sequence from a fixed ordered collection of elements. That is, from the items a, b, c, I needed an infinite sequence like a, b, c, a, b, c, a, b, c, ....
Although Swift 4.1 brought many improvements to Swift, it was intended to be source compatible with Swift 4.0, so most improvements where purely additive. But one notable exception was the rename from flatMap to compactMap. I always thought Swift’s old flatMap on arrays and other sequences was somewhat of an annoyance, as it never really was a proper flat map.
Swift 4.0 added support for strongly typed key paths. A KeyPath<A, B> is a type that defines a path from a root type A, through zero or more hoops, to a resulting type B through a series of named accessors. It’s a way of accessing a type’s properties indirectly.
When working with collection views (and table views) in UIKit, you have to implement a data source which feeds the collection view with cells. Since a collection view often has hundreds (or even thousands) of cells, but only a few are visible on screen at a time, UIKit provides a mechanism for reusing cells as they scroll offscreen and new cells scroll into view. And although UIKit provides such a mechanism, the API is somewhat lacking. And it certainly isn’t very swifty.
I just released a small hobby project to the App Store. It won’t make me rich, but its nice to start on a fresh project and try new stuff. Now that I’m a consultant, I need to keep my tools sharp, and there’s a lot of tech I’ve been wanting to try for some time. The app is written in 100% swift, using promises, value types were possible, etc. It has a thin backend written in node.js that runs on Heroku. Check it out!