samhuri.net/posts/2017/10/swift-optional-or.md
Sami Samhuri 007b1058b6
Migrate from Swift to Ruby (#33)
Replace the Swift site generator with a Ruby and Phlex implementation.
Loads site and projects from TOML, derive site metadata from posts.

Migrate from make to bake and add standardrb and code coverage tasks.

Update CI and docs to match the new workflow, and remove unused
assets/dependencies plus obsolete tooling.
2026-02-07 21:19:03 -08:00

36 lines
1.1 KiB
Markdown

---
Author: Sami Samhuri
Title: "A nil-coalescing alternative for Swift"
Date: "6th October, 2017"
Timestamp: 2017-10-06T14:20:13-07:00
Tags: iOS, Swift
---
Swift compile times leave something to be desired and a common culprit is the affectionately-named [nil-coalescing operator][nilop]. A small extension to `Optional` can improve this without sacrificing a lot of readability.
```swift
extension Optional {
func or(_ defaultValue: Wrapped) -> Wrapped {
switch self {
case .none: return defaultValue
case let .some(value): return value
}
}
}
```
And you use it like so:
```swift
let dict: [String : String] = [:]
let maybeString = dict["not here"]
print("the string is: \(maybeString.or("default"))")
let otherString = dict["not here"].or("something else")
```
I'm sure someone else has come up with this already but I haven't seen it yet.
_([gist available here][gist])_
[nilop]: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID72
[gist]: https://gist.github.com/samsonjs/c8933c07ad985b74aba994f2fdab8b47