So it’s been a year of veritably epistemic closure on the Swift front, hasn’t it? With ABI stability in Swift 5 Released! and module stability in Swift 5.1 Released! why, it’s a serious language finally! We kid, we kid. If anything, it’s become more whimsical, it seems, what with these modifiers and wrappers and the good lord only knows what springing up like weeds; our favorite so far on the whimsicality front is definitely this —
@dynamicCallable Part 3: Mustacheable
After Shell commands as Swift functions and the Swift/ObjC Bridge, Part 3 in our quest to find a useful application for the Swift 5 Dynamic Callable feature: Mustache templates as a function (short: MaaF). This one may actually make some sense…
Although the competition is tough indeed. Let us take the ExpressibleByStringInterpolation feature, generally recognized as both beauty and super-powered as string interpolations go — but would it strike you that you can apply it to text stream decoding?
Regular Expression Decoder: A decoder that constructs objects from regular expression matches.
RegularExpressionDecoder provides a convenient solution to constructing Decodable objects from regular expression matches by automatically matching coding keys to capture group names. And it can do so safely, thanks to the new ExpressibleByStringInterpolation protocol in Swift 5…
And then of course there’s the new custom string delimiters …
Say, for whatever reason, you were in desperate need of Bill the Cat ASCII art in your app. Maybe you were very drunk and had a bet. Maybe you were working with some kind of Unix awk client. I dunno. Let’s just start with the proposition that this was a real and meaningful challenge in your life.
… right, at that point we’re approaching the absurd, never mind the whimsical, and when you check out some of the new NSHipsters, well…
Identifiable: What constitutes the identity of an object?
Philosophers have contemplated such matters throughout the ages. Whether it’s to do with reconstructed seafaring vessels from antiquity or spacefaring vessels from science fiction, questions of Ontology reveal our perception and judgment to be much less certain than we’d like to believe…
… new we’re into the downright surreal. As well as circling back to our original assertion of epistemically closed Swiftness, to wrap that diversion up with a nice bow and call it a day.
Any-ways, as always if you want a quick reference of changes between any set of Swift versions check out
What’s new in Swift?
And for some more in-depth collections, check out
raywenderlich.com’s What’s New in Swift 5? and What’s New in Swift 5.1?
hackingwithswift.com’s What’s new in Swift 5.0 and What’s new in Swift 5.1
Swiftbysundell.com’s 5 small but significant improvements in Swift 5.1
The biggest explosion of creativity has definitely been around Property Wrappers: check out
Swift Property Wrappers “will have arguably the biggest impact on the «je ne sais quoi» of Swift in version 5.1 and beyond”
Property Wrappers in Swift 5.1 “or How Swift decided to become Java”
ValidatedPropertyKit: “Easily validate your Properties with Property Wrappers”
Burritos: “A collection of well tested Swift Property Wrappers.”
Property wrappers to remove boilerplate code in Swift
Better Codable Through Property Wrappers
Swift Dependency Injection via Property Wrapper
Stop force unwrapping IBOutlets with @Delayed
Atomic property wrapper in Swift
How can Property Wrappers and Function Builders be leveraged?
Speaking of those Function Builders, there’s some interesting projects out there looking at them for all DSLy things:
Create Your First Function Builder in 10 Minutes
NSAttributedStringBuilder: “Composing NSAttributedString with SwiftUI-style syntax”
Vaux: “A HTML DSL library for Swift”
marina: “Understanding SwiftUI by reimplementing it to render to HTML”
The Swift 5.1 features that power SwiftUI’s API
Here’a aome other articles with various tips, tricks, techniques, and reminders about applying various syntactic niceties that have accumulated over the last few Swifts:
Dynamic Member Lookup combined with key paths in Swift
Swift 5.1 introducing key paths suddenly makes dynamic member lookup support a lot more interesting. It allows us to easily access values from an instance while keeping our models structured and small…
The Law: Atomics are hard
Swift 5 turns on exclusivity checking by default. This has some interesting interactions with atomics, especially when running under the Thread Sanitizer (TSAN)…
Different flavors of type erasure in Swift
This week, let’s start by taking a look at what makes type erasure such an essential technique in Swift, and then move on to explore different “flavors” of implementing it — and how each flavor comes with its own set of pros and cons..
Phantom types in Swift
This week, let’s take a look at a technique that can let us leverage Swift’s type system to perform even more kinds of data validation at compile time — removing more potential sources of ambiguity, and helping us preserve type safety throughout our code base — by using phantom types…
Regular Expressions in Swift
You may be surprised to learn that you can — in fact — use regular expressions in a Swift one-liner: you just have to bypass NSRegularExpression entirely…
How to use Result in Swift
Result has four other methods that may prove useful: map(), flatMap(), mapError(), and flatMapError(). Each of these give you the ability to transform either the success or error somehow…
Let’s stop filtering for a second
We’ll cover for loops versus filtering, using removeAll(where:), contains(where:), allSatisfy(predicate:), reduce, first(where:), and Swift 5’s count(where:)…
Creating Thread-Safe Generic Values in Swift
Well, we’re still waiting for coroutines in Swift several years in. In the meantime, we have many concurrency mechanisms to choose from…
Ordered Collection Diffing + Swift 5.1 Collection Diffing
This change adds native support for diffing and patching functionality for various collection types. Many state management patterns can benefit from this improvement…
Making types expressible by string interpolation
We can now express our Path type using any kind of string literal — which makes it much more convenient to use, while still giving us all of the benefits of stronger typing.
Efficiently Mutating Nested Swift Data Structures
Yep, Array & Dictionary both support in-place mutations. For Dictionary, the recommended way is to use the defaulting subscript…
The power of subscripts in Swift
a new feature that’s being introduced as part of Swift 5.1 — static subscripts — which work much the same way as instance subscripts, only that they enable us to subscript directly against a type itself…
That’s about it for now — time to sit back and relax for a while is it?
On November 5, 2019 the swift-5.2-branch branch will be cut…
The innovation, it never stops!
How Swift Achieved Dynamic Linking Where Rust Couldn’t
The Complete Guide to Property Wrappers in Swift 5