Skip to content

Instantly share code, notes, and snippets.

@rl-pavel
Last active October 15, 2020 00:32
Show Gist options
  • Save rl-pavel/7bc81f0a84b92f57f82384b34989d16e to your computer and use it in GitHub Desktop.
Save rl-pavel/7bc81f0a84b92f57f82384b34989d16e to your computer and use it in GitHub Desktop.
Optional `get(orSet:)` helper extension.
var foo: String?
var bar: String? = "bar"
print(foo) // nil
print(foo.get(orSet: "foo")) // foo
print(foo) // Optional("foo")
print(bar) // Optional("bar")
print(bar.get(orSet: "test")) // bar
print(bar) // Optional("bar")
extension Optional {
mutating func get(orSet expression: @autoclosure () -> Wrapped) -> Wrapped {
guard case let .some(item) = self else {
let newItem = expression()
self = .some(newItem)
return newItem
}
return item
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment