Swift 5结果类型

时间:2019-04-08 12:19:35

标签: swift swift5

Apple在Swift 5中引入了Result类型。它是具有两种情况的通用枚举:

public enum Result<Success, Failure: Error> {
    case success(Success), failure(Failure)
}

我个人曾经在网络调用success: Completionfailure: Completion中使用过两个单独的补全,但是从现在的情况来看,Apple强迫我们使用Result类型的单个补全,然后在内部执行开关。那么使用Result的这种方法有什么优势?因为在很多情况下,我可以省略错误处理,而无需编写此switch。谢谢。

2 个答案:

答案 0 :(得分:2)

您不应忽略Resultfailure的情况。您不应该使用Result进行操作,也不要因为失败而关闭。您应该处理错误

无论如何,引入了Result类型来简化完成处理程序。您可以使用单个关闭来处理成功或失败(如果两个单独的关闭效果更好或不同,则基于主意见)。 Result也专为错误处理而设计。您可以简单地创建符合enum的{​​{1}},然后创建自己的错误案例。

答案 1 :(得分:-1)

Swift 5 引入了 Result<Success, Failure> associated value 枚举[About] 这意味着您的结果可以是 successfailure 以及附加信息(成功结果或错误对象)。好的做法是将错误案例和成功案例作为原子任务进行管理。

优点:

  • Result 是单个/通用(通用)/完整类型,可用于所有是/否情况
  • 非可选类型
  • 强制消费者检查所有情况
public enum Result<Success, Failure>  {
    case success(Success)
    case failure(Failure)
}

使用它

//create
func foo() -> Result<String, Error> {
    //logic
    if ok {
        return .success("Hello World")
    } else {
        return .failure(.someError)
    }
}

//read
func bar() {
    let result = foo()
    switch result {
    case .success(let someString):
        //success logic
    case .failure(let error):
        //fail logic
    }
}