YetAnotherResult 1.2.12

YetAnotherResult 1.2.12

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布的上次发布2016年2月
SPM支持 SPM

Mikhail StepkinMikhail Stepkin 维护。



  • Mikhail Stepkin

Result

Swift μ 框架,用于包装抛出函数的结果。

如何安装

Swift 包管理器

Package.swift:

import PackageDescription

let package = Package(
  …
  dependencies: [
    …
    .Package(url: "https://github.com/Skogetroll/Result.git", majorVersion: 1, minor: 2),
    …
  ]
  …
)

如何使用?

像这样:

let result = Result<Type> {
    // Your unsafe code resulting in Type or Error goes here
}

或者 这样

let result = Result<Type>(/* Your unsafe code resulting in Type or Error goes here */)

如何获取值?

let value: Type? = result.value

如何获取错误?

let error: ErrorType? = result.error

如何 崩溃应用程序 返回到抛出范式?

let value: Type = try result.unwrap()

我可以如何使用 Result<V> 做其他什么?

您可以使用

Map

let resultString = Result<String>(try unsafelyGetString())
let stringLength = resultString.map { string in
  string.characters.count
}

// stringLength now contains either value of `String.Index.Distance` or error wrapped in Result<Distance>

// Or you can use operator `<^>` to perform map
process <^> resultString
// Here `process : String -> Void` gonna be called if and only if resultString resulted successfully

Flat map

let someResult = Result(try unsafelyGetResult())
let processedResult = someResult.flatMap { value in
    return Result(try someUnsafeProcessing(value))
}

// or you can use operators `>>-` and `-<<`

let processedResult = someResult >>- { value in Result(try someUnsafeProcessing(value)) }

Apply

let resultedFunction: Result<A -> B> =let resultedValue: A =let result: Result<B> = resultedValue.apply(resultedFunction)

// or you can use operator `<*>`

let result: Result<B> = resultedFunction <*> resultedValue

Wrap

func yourThrowingFunction(in: InType) throws -> (out: OutType) {
    …
}

let resultWrappedFunction: InType -> Result<OutType> = wrap(yourThrowingFunction)

let someInput: InType =// And we can get
let resultOutput = resultWrappedFunction(someInput)

// instead of
do {
    let output = try yourThrowingFunction(someInput)
}