Skip to content

Instantly share code, notes, and snippets.

@uhooi
Last active September 18, 2021 00:59
Show Gist options
  • Save uhooi/42ad67dde77410c083f1bb75ebe9646a to your computer and use it in GitHub Desktop.
Save uhooi/42ad67dde77410c083f1bb75ebe9646a to your computer and use it in GitHub Desktop.
Optional+Let.swift
extension Optional {
mutating func `let`(handler: (inout Wrapped) -> Void) {
self = map {
var wrapped = $0
handler(&wrapped)
return wrapped
}
}
}
struct Dog {
var apples = 10
mutating func eat() {
apples -= 1
}
}
var dog: Dog? = .init()
// Before
// 毎回 nil チェックするのが冗長
// dog?.eat()
// dog?.eat()
// dog?.eat()
// After
// Kotlin の `let()` と同じように使える
dog.let {
$0.eat()
$0.eat()
$0.eat()
}
print(String(describing: dog?.apples) // Optional(7)
@uhooi
Copy link
Author

uhooi commented Sep 18, 2021

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment