-
-
Save riteshhgupta/358db2ed3b6968ef18880cb28bdb6963 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Optional { | |
// `then` function executes the closure if there is some value | |
func then(_ handler: (Wrapped) -> Void) { | |
switch self { | |
case .some(let wrapped): return handler(wrapped) | |
case .none: break | |
} | |
} | |
} |
Isn't this just a map
that doesn't return, and also doesn't work with handlers that return?
func then(_ handler: (Wrapped) -> Void) {
map(handler)
}
You could easily make it work with functions that return other types:
func then<T>(_ handler: (Wrapped) -> T) {
let _ = map(handler)
}
But even then the only reason for this to exist would be to improve semantics, but then
isn't better than map
as it incorrectly implies time.
Maybe apply
?
how can I add another block for failure? I'm looking for something like this:
image.ifSome {
}.else {
}
for the else part, just implement fun else() with ".none"-case i think
nice!
how about
let age: Int? = 25
age.ifItHaz { print($0) }
+1 for apply
, @NinoScript !
@hashemp206
import Foundation
extension Optional
{
@discardableResult
func ifSome(_ handler: (Wrapped) -> Void) -> Optional {
switch self {
case .some(let wrapped): handler(wrapped); return self
case .none: return self
}
}
@discardableResult
func ifNone(_ handler: () -> Void) -> Optional {
switch self {
case .some: return self
case .none(): handler(); return self
}
}
}
struct Person {
let name: String
}
var p: Person? = Person(name: "Joe")
p.ifSome { print($0) }.ifNone { print("none") } // prints Person
p = nil
p.ifSome { print($0) }.ifNone { print("none") } // prints none
+1 for above
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Why is the method named
then
? When using it like the following it doesn't seem very readable to me:I'd rather name it something like
notNil
ofifSome
.