-
-
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 | |
} | |
} | |
} |
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
Isn't this just a
map
that doesn't return, and also doesn't work with handlers that return?You could easily make it work with functions that return other types:
But even then the only reason for this to exist would be to improve semantics, but
then
isn't better thanmap
as it incorrectly implies time.Maybe
apply
?