For the first time since we started, Swift wasn’t the busiest platform of the month. Eight of August’s 18 Kodebits were Kotlin, against seven for Swift and three for Dart. Not a deliberate editorial change, just how the topics fell…but it does mean Android developers have the fullest month of the run so far.
August was also a gentler month by design—to give us all a bit of a chilled summer. July finished with a hard streak: reified generics, inline functions, custom operators, factory constructors. This time there’s exactly one advanced bit in the whole set, and half of them are beginner level. If July felt like it was getting away from you, this is a good month to come back on.
There are a few nice coincidences in here too. Dart’s late and Kotlin’s lateinit landed four days apart, which is about as clean a side-by-side as you’ll get for two languages solving the same problem. Ranges turned up in both Kotlin and Swift inside a week. And Swift’s long-running value-versus-reference thread — struct copies back in June, class references in July — finally got the head-to-head comparison it had been building towards.
The full month is below, split by platform and running beginner to advanced. Previous roundups: April, May, June and July.
Beginner means you can probably answer it on sight. Intermediate means read the code twice. Advanced means the obvious answer is likely the wrong one. Each Kodebit page gives you the puzzle first, then the answer, an explanation, and a couple of links into the Kodeco library if you want to keep pulling the thread.
Android & Kotlin
Eight Kodebits, Kotlin’s biggest month yet. Two threads run through it: null safety comes back around, with the safe-call and Elvis operators getting their own bits after appearing together back in April, and the month closes on a pair about type checking that are best read as one. Add ranges, string templates and zip, and this is a solid tour of the everyday Kotlin toolkit.
Beginner
- Day 68: Zip Collections — Pair up two collections element by element and get a list of pairs back. The detail that catches people out is what happens when the two lists aren’t the same length.
-
Day 70: Range Progression — Ranges in Kotlin do more than count upwards one at a time.
step,downToanduntilcover most of the loops you’d otherwise write by hand. -
Day 73: String Template — Drop values straight into a string with
$name, or a whole expression with${...}. Swift’s version of this appeared back in June, and the two are close enough that the comparison is worth a moment. - Day 76: Elvis Operator — Supply a fallback when the left-hand side is null. April’s Day 7 paired this with the safe-call operator; here it gets a bit to itself, which makes the precedence rules easier to see.
-
Day 80: Safe Call Operator — The other half of that pairing.
?.returns null rather than throwing when the receiver is null, which is the mechanism doing most of the work in Kotlin’s null safety story.
Intermediate
- Day 74: Lateinit Property — Declare a non-null property without initialising it immediately, and promise the compiler you’ll set it before anything reads it. Break that promise and you get an exception rather than a null. Read it next to Day 72 for the Dart equivalent.
-
Day 83: Smart Cast — Once you’ve checked a value’s type with
is, Kotlin treats it as that type for the rest of the block. No second cast needed, which removes a whole category of boilerplate you’d write in Java. -
Day 85: Type Check As Cast — The explicit version, and the difference between
asandas?. One throws when the cast fails, the other gives you null. Knowing which is which matters more than it sounds.
iOS & Swift
Seven Kodebits, and after July’s run at building your own abstractions this month goes back to fundamentals: ranges, loops, optionals, guard, reduce. The standout is Day 71, which puts structs and classes directly against each other — the natural conclusion to a thread that’s been running since June.
Beginner
-
Day 75: Range Iteration — Iterating a range with
...and..<. The half-open version is the one people reach for less often and regret more. -
Day 81: Guard Multiple Bindings — A single
guardcan unwrap several optionals at once. Compare it with April’s Day 6 to see how much nesting you avoid when the number of optionals goes up. -
Day 82: Stride By Value —
strideis how you count in steps other than one, or count backwards. Worth knowing before you write awhileloop with a manual counter.
Intermediate
- Day 71: Value vs Reference — Structs and classes side by side, with the same operations applied to each. June covered the struct half and July the class half; this is where the distinction becomes something you can predict rather than recall.
-
Day 77: Optional flatMap — When a transformation on an optional returns another optional,
mapleaves you with an optional optional.flatMapis the fix, and understanding why is more useful than memorising when to use it. -
Day 78: Switch Where Clause — Attach a condition to a
switchcase so it only matches when the condition holds. Combined with the pattern matching from June, this is where Swift’sswitchpulls decisively ahead of the C-style version. -
Day 84: Reduce Product — Collapse a collection to a single value with
reduce. Most people meet it as a way to sum an array and stop there; multiplying is a useful nudge that the initial value and the operation are both yours to choose.
Flutter & Dart
Three Kodebits, and the quietest month for Dart so far. What’s here is well chosen, though: late mirrors the Kotlin bit from earlier in the month, collection if gets a second outing after April, and the spread operator bit is the only advanced Kodebit in all of August.

