---
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
