Daniel Steinberg's

Swift Training in London

March 18-20, 2019


Photo by Henry Be on Unsplash


Swift Best Practices in Your iOS Apps

March 18 & 19, 2019

Getting the most from Swift 5.0 in your iOS 12 Apps

This intermediate course is for iOS programmers who know the fundamentals of the Swift Programming Language but haven't mastered the paradigms.

What you'll learn

We build up a simple multi-scene application that surrounds a functional non-mutating core with an OO GUI. The point of the two days is not, of course, the example but is instead the collection of techniques we explore along the way.

We begin by test driving the design of our model and add support for generics using conditional conformance. We then drop our model into a simple table view application. We add a second scene using closures to communicate information and functionality across different scenes, storyboards, and modules.

Swift gives us many techniques for addressing what to do when things go wrong. In the next section we'll look at Optionals, asserts and preconditions, Swift's Error type, and Swift 5's new Result type.

Next we focus on the functional aspects of Swift by looking at map, flatMap, filter, reduce, and friends for collections. We'll use many of these techniques when we work with Strings now that they are again collections (with a default encoding). We'll finish the course by making asynchronous calls to fetch and process JSON using the new Codable protocol and finish with a simplistic implementation of Futures.

Syllabus   Book Now

Thinking Functionally in Swift 5.0

March 20, 2019

This course is for experienced Swift developers who want to explore Functional Programming.

What you'll learn

At the end of this day, you'll look at functions differently. Actually, you'll look at functions differently from the very start of the day when we express Sets and Pictures using structs that contain nothing more than a single property that is a closure.

Next, we review the map() function for arrays and generalize the concept to map for Optionals, Swift 5's new Result type, and our own type. The goal is for you to see map as a design pattern.

A type that supports map is a Functor and one that supports flatMap is a Monad. In our third section we'll look at two flatMaps that are part of the Swift standard library and a third that has been renamed to compactMap. You'll understand why this renaming was a good idea and you'll come to appreciate where we want to use a flatMap.

Our final section looks at a higher-order function that is somewhere in between map and flatMap: apply. In some ways apply is more powerful than flatMap and we'll see that in some situations we get a lot of return with very little effort.

We assume that you are an experienced programmer who has spent some time looking at Swift but you are relatively new to Functional Programming.

Syllabus   Book Now

After attending our January 2018 course:

This was a fab training course. Learned to think about things differently, not just how to do stuff. Really enjoyed. Thanks to Paul and Daniel


"Don't miss this if you want to learn Swift in London! Daniel is one of the best teachers I've had."



I am so glad I attended @dimsumthinking‘s training at #appdevcon. You don’t see teachers like him very often, a very smart guy who can explain complicated things in a simple way using real life examples. I learned so much from you. Thank you @dimsumthinking ,it was a pleasure


Equipment Requirements:

  • a Mac running Mac OS Mojave

  • latest version of Xcode 10 installed

  • we'll bring the coffee ;)


Moorgate - Bonhill House

1-3 Bonhill Street
London, EC2A 4BX

(next door to Google Campus London)



  • The courses run from 9:30 to 17:30 each day.

  • You are invited to join us for breakfast from 8:30.

  • Lunch will be served around 13:00.

  • Coffee, biscuits and cakes will be served throughout the day.

  • All these are included in the price of the ticket.