Swift Evolution Monthly: July ‘22
My first Indie App, my first Evolution pitch experience, the last of 6 Regex proposals, external conformance warning, implicit [weak self] capture & a new ‘move’ keyword.
Here we are again with another monthly summary of Swift Evolution. July was a very special month for me, so I’d like to start with two topics that are important to me personally. I hope you’ll excuse that — but both are still on-topic:
Firstly, my very first app as an Indie Developer, which I’ve been working on for six months now, is finally done and in Open Beta! It’s an app for Swift developers and improves the localization workflow in Xcode. In the first version, among other things, you can add new localized keys to your projects in multiple languages without ever leaving your Swift file and safely reference them in code — just by filling out a single form! The app will take care of adding entries to all the right files and even optionally machine-translate to multiple languages, see this GIF:
If this looks interesting to you, please try the beta and send me your feedback.
Secondly, one day after sending out the previous issue of this newsletter, I wrote my very first own Swift Evolution pitch. In the thread, I’m requesting a new syntax to improve the usage of the
Result type as an alternative for Swift's native error handling. In the above-mentioned app project, I preferred to have typed errors in order to vastly improve my error handling experience by forcing me to handle all possible error cases with a useful message. But Swift currently doesn't support typed throws, so I used
Result instead and migrated all my throwing functions in the above-mentioned app to it. I'll be writing about my approach in detail soon on my dev blog if you're interested. But I came across two safety & convenience issues that I couldn't fix without changes in the language itself. Thus, the pitch.
If my pitch sounds like something you’d want to have in Swift, don’t get too excited though. Even though I tried to scope it clearly and I tried…