Summary of what’s new in Foundation, Swift 4, from session 212. Tip: You can download WWDC videos easily with wwdc-dl.
Key Paths
Apple calls it Smart, because it is statically safe, and fast.
It is built into Swift language, with a single \
// To get via keypath
let age = ben[keyPath: \Kid.age]
// To set via keypaht
ben[keyPath: \Kid.nickname] = "Ben"
Appending Key Paths
You can append key path, provided the type you “chain” is the same.
So if you append, the final keypath is simply of type Keypath<BirthdayParty, Double>
.
There are more keypath types.
Key-Value Observation
// To use
let observation = mia.observe(\.age) { observed, change in
// observed is the updated "mia"
}
Codable/JSON
Swift also finally recognize the importance of JSON.
You simply add the trait protocol Codable
to your model, and it will work (because of default protocol extension).
If you want to customize the key names, you can simply add your own CodingKeys
as an enum in your model. See how the camel case “comment_count” is customized:
private enum CodingKeys : String, CodingKey {
case author
case commentCount = "comment_count"
}
Ok, actually Codable
is not only for JSON data, but for other formats like Property List too. There is JSONDecoder
, and also PropertyListDecoder
What Else ?
There is more in Swift 4, some small, some advanced API. Many were not touched in session 212.
Not going to cover all, but here are some teasers:
- String is now a Collection
- Multi-line string with
"""
- Collection has more API such as
mapValues
,MutableCollection.swapAt(_:_:)
, default Dictionary value - Infer one-sided range eg. infer start and end index
- Generic subscript
fileprivate
access level for extension across files- No more @objc inference