Swift 4.2 Released
Swift 4.2 is now officially released! Swift 4.2 builds on the strengths of Swift 4, delivering faster compile times, improving the debugging experience, updating the standard library, and converging on binary compatibility.
[…]
The standard library in Swift 4.2 includes a number of new features, including improvements to the Hashable protocol as well as a new unified set of randomization functions and protocols.
See more at:
A year later, and Swift 4.2 shipped with a ship-stopper KVO bug still unresolved. Don’t use the Swift KVO syntax in an iOS app unless you want random crashes.
Previously: Swift 4.2.
Update (2018-09-20): John Sundell:
Instead of manually defining our font dictionary, like we do above, let’s take a look at how Swift 4.2’s
CaseIterable
can help us avoid bugs and make our code more consistent when defining enum-keyed dictionaries.
Ideally, you’d be able to initialize the
Hasher
with a seed, instead of mixing it in. Swift’sHasher
uses a different seed for each launch of the application (unless you set an environment variable which they added for consistent hashing between launch, mostly for testing purposes), meaning you can’t write these values to disk. If we controlled the seed of theHasher
, then we could write these values to disk as well. As this Bloom filter currently stands, it should only be used for in-memory caches.
I think this is new in the Swift 4.2 toolchain: it is now possible to declare a nested type in an extension, in a different file than the one with the parent type’s declaration. This will clean up things nicely
Update (2018-09-24): See also: Swift 4.2 Release Notes for Xcode 10.
You can reverse engineer the resulting binary, but it would be painfully hard to understand what the [
CaseIterable
] assembly means. Another option is to fork the Swift compiler and attach lldb to it, but you would need to know what to breakpoint in the first place - which I have no idea.Luckily, the Swift compiler in your Xcode’s toolchain offers several arguments that allow you to extract human-readable files that represent “processed” versions of Swift source files, and one of these options allow you to retrieve the Abstract Syntax Tree (AST) of a file.