CocoaPods trunk is moving to be read-only. Read more on the blog, there are 13 months to go.
| TestsTested | ✓ |
| LangLanguage | SwiftSwift |
| License | MIT |
| ReleasedLast Release | Dec 2017 |
| SwiftSwift Version | 4.0 |
| SPMSupports SPM | ✗ |
Maintained by Rui Peres.
Swift's Optional is pretty awesome, but it can always get better. This repository is an humble attempt to add some utility methods to it.
filter: (Wrapped -> Bool) -> Optional<Wrapped>let number: Int? = 3
let biggerThan2 = number.filter { $0 > 2 } // .Some(3)
let biggerThan3 = number.filter { $0 > 3 } // .NonemapNil: (Void -> Wrapped) -> Optional<Wrapped>let number: Int? = 3
number.mapNil { 2 } // .Some(3)
let nilledNumber: Int? = nil
nilledNumber.mapNil { 2 } // .Some(2)flatMapNil: (Void -> Optional<Wrapped>) -> Optional<Wrapped>let number: Int? = 3
number.flatMapNil { .Some(2) } // .Some(3)
let nilledNumber: Int? = nil
nilledNumber.flatMapNil { .Some(2) } // .Some(2)then: (Wrapped -> Void) -> Void (similar to [T]'s forEach)let number: Int? = 3
number.then { print($0) } // prints "3"
let nilledNumber: Int? = nil
nilledNumber.then { print($0) } // print won't be calledmaybe: U -> (Wrapped -> U) -> U (similar to Haskell's maybe)let number: Int? = 3
number.maybe(100) { $0 + 1 } // 4
let nilledNumber: Int? = nil
nilledNumber.maybe(100) { $0 + 1 } // 100onSome: (Wrapped -> Void) -> Optional<Wrapped> (injects a side effect in the .Some branch)let number: Int? = 3
let sameNumber = number.onSome { print($0) } // prints "3" & returns .Some(3)
let nilledNumber: Int? = nil
let sameNilledNumber = nilledNumber.onSome { print($0) } // .NoneonNone: (Void -> Void) -> Optional<Wrapped> (injects a side effect in the .None branch)let number: Int? = 3
let sameNumber = number.onNone { print("Hello World") } // .Some(3)
let nilledNumber: Int? = nil
let sameNilledNumber = nilledNumber.onNone { print("Hello World") } // prints "Hello World" & returns .NoneisSome: Boollet number: Int? = 3
let isSome = number.isSome // true
let nilledNumber: Int? = nil
let isSome = nilledNumber.isSome // falseisNone: Boollet number: Int? = 3
let isSome = number.isNone // false
let nilledNumber: Int? = nil
let isSome = nilledNumber.isNone // trueCarthage:
github "RuiAAPeres/OptionalExtensions"
CocoaPods:
pod "OptionalExtensions"
Manually:
Grab the OptionalExtensions.swift file and drop it in your project.
We will gladly accept Pull Requests with new methods or improving the ones that already exist. Documentation, or tests, are always welcome as well.
OptionalExtensions is licensed under the MIT License, Version 2.0. View the license file
Copyright (c) 2015 Rui Peres