Skip to content

marciok/OptionalExtras

Repository files navigation

OptionalExtras

CI Status Version License Platform

Handful of functions that will help you work with Optional types. 100% inspired by std::option - Rust

Examples

expect(_ description: String) -> Wrapped

Unwraps an Optional, yielding the content of a .some. Or throws fatalError with given description

let x: String? = nil
x.expect("the world is ending")

unwrapOr(_ def: Wrapped) -> Wrapped

Returns the contained value or a default.

let x: Int? = nil
let r = x.unwrapOr(20) // r == 20

unwrapOrElse(_ f: () -> Wrapped) -> Wrapped

Returns the contained value or computes it from a closure.

let x: Int? = nil
let r = x.unwrapOrElse { 2 * 2 } // r == 4

isNone() -> Bool

Returns true if the Optional is nil

let x: String? = nil
let r = x.isNone() // r == true

isSome() -> Bool

Returns true if the Optional is .some

let x: String? = "foo"
let r = x.isSome() // r == true

mapOr<T>(_ def: T, _ f: (Wrapped) -> T) -> T

Applies a function to the contained value (if any), or returns a default (if not).

let x: String? = "foo"
let r = x.mapOr(42) { (v: String) -> Int in
   v.characters.count
} // r == 3

mapOrElse<T>(_ def: () -> T, _ f: (Wrapped) -> T) -> T

Applies a function to the contained value (if any), or computes a default (if not).

let x: String? = nil
let r = x.mapOrElse({
    3 * 3
},
{ (v: String) -> Int in
    v.characters.count
}) // r == 9

and(_ optb: Optional) -> Optional

Returns .none if the Optional is nil, otherwise returns optb.

let x: Int? = 10
let y: Int? = nil

let r = x.and(y) // r == nil

or(_ optb: Optional) -> Optional

Returns nil if the Optional is .none, otherwise returns optb.

let x: Int? = 18
let y: Int? = 10
let r = x.or(y) // r == 18

orElse(_ f: () -> Optional) -> Optional

Returns the Optional if it contains a value, otherwise calls f and returns the result.

let x: String? = nil
let r = x.orElse { "foo" } // r! == "foo"

Installation

OptionalExtras is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "OptionalExtras"

Or through Carthage:

github "marciok/OptionalExtras"

Author

Marcio Klepacz, [email protected]

License

OptionalExtras is available under the MIT license. See the LICENSE file for more info.