berikv/FailableSequence
FailableSequence support for Swift
Installation
For a Swift Package
Edit the Package.swift file. Add the FailableSequence as a dependency:
let package = Package(
name: " ... ",
products: [ ... ],
dependencies: [
.package(url: "https://github.com/berikv/FailableSequence.git", from: "0.0.2") // here
],
targets: [
.target(
name: " ... ",
dependencies: [
"FailableSequence" // and here
]),
]
)For .xcodeproj projects
- Open menu File > Add Packages...
- Search for "https://github.com/berikv/FailableSequence.git" and click Add Package.
- Open your project file, select your target in "Targets".
- Open Dependencies
- Click the + sign
- Add FailableSequence
Usage
Create a failable sequence using a first and next().
let sequence = failableSequence(first: 0) { number in
let next = number + 1
if next == 3 { throw NumberIsThreeError() }
return next
}
var numbers = [Int]()
var theError: Error?
do {
try sequence.forEach { numbers.append($0) }
} catch {
theError = error
}
// numbers == [0, 1]
// error is NumberIsThreeErrorCreate a lazy failable map from another sequence.
let sequence = (0..<4).failableMap { number -> Int in
let next = number + 1
if next == 3 { throw NumberIsThreeError() }
return next
}
var numbers = [Int]()
var theError: Error?
do {
try sequence.forEach { numbers.append($0) }
} catch {
theError = error
}
// numbers == [1, 2]
// error is NumberIsThreeErrorCreate an Array from a FailableSequence.
// Note, if this sequence would cause the *Array init* to throw an error if number == 3.
let sequence = failableSequence(first: 0) { number in
let next = number + 1
if next == 3 { throw NumberIsThreeError() }
return next
}
let array = try Array(sequence.prefix(2))
// array == [0, 1]Note that throwing an error will not end the sequence.
let sequence = (0...4).failableMap { number -> Int in
let next = number + 1
if next == 3 { throw NumberIsThreeError() }
return next
}
let array = Array(sequence.skipOnThrowSequence)
// array == [1, 2, 4, 5]Contributing
Make sure your code is well tested. Run ./coverage.sh for an overiew.
License
Licensed under MIT. See the license.md
Package Metadata
Repository: berikv/FailableSequence
Stars: 0
Forks: 0
Open issues: 0
Default branch: main
Primary language: swift
License: MIT
README: Readme.md