Posts by year

2018

Without actually escaping

6 minute read

When dealing with lazy sequences and generic functions, there are subtle pitfalls you need to be aware of. You could easily negate the laziness and end up drastically slowing down your algorithms.

Repeating sequence

less than 1 minute read

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, ....

Compact and flat maps

8 minute read

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.

Keypaths as closures

3 minute read

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.

2017

Nib-backed Collection Views

5 minute read

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.

2016

Dukkert 🏊 for iOS

less than 1 minute read

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!

Protocol ‘SequenceType’ can only be used as a generic constraint …

9 minute read

In Swift, a protocol can have an associated type, which is kinda like generics, except it isn’t. This is most often apparent when trying to use it as such. You’ve probably seen the compiler complain: Protocol 'SequenceType' can only be used as a generic constraint. In this post we explore why, and how to solve it.

appeared.in

less than 1 minute read

After five years in Telenor, the last two and a half in appear.in, I have finally decided I needed new challenges. It wasn’t an easy decision, but it was time. Five years in the same company feels like an eternity. Starting tomorrow, I will now work for a small consultancy. I’m excited to get started. Hopefully, I’ll be working on many more diverse projects.

How to avoid implicit retain cycles when using function references

8 minute read

One very nice thing about Swift is that functions are first-class values. They can be assigned to variables, curried, and you can pass them as arguments: If a function takes a closure as a parameter, you can pass a reference to a function in place of an in-line closure, as long as the types match. We may think of functions as just special kinds of closures with a name. But beware! Therein lies dragons.

App Transport Security in debug builds.

1 minute read

Since iOS 9, Apple has enforced best practices in the secure connections between your app and its back end, by adding something called “App Transport Security”, or “ATS” for short. ATS is on by default, and prevents accidental disclosure and provides secure default behavior by mandating that a network connection is over HTTPS, and by limiting the supported ciphers to a subset that is known to be secure, notably TLS 1.2 and so-called forward secrecy.