Apple在Swift 5中引入了Result
类型。它是具有两种情况的通用枚举:
public enum Result<Success, Failure: Error> {
case success(Success), failure(Failure)
}
我个人曾经在网络调用success: Completion
和failure: Completion
中使用过两个单独的补全,但是从现在的情况来看,Apple强迫我们使用Result
类型的单个补全,然后在内部执行开关。那么使用Result
的这种方法有什么优势?因为在很多情况下,我可以省略错误处理,而无需编写此switch
。谢谢。
答案 0 :(得分:2)
您不应忽略Result
为failure
的情况。您不应该使用Result
进行操作,也不要因为失败而关闭。您应该处理错误。
无论如何,引入了Result
类型来简化完成处理程序。您可以使用单个关闭来处理成功或失败(如果两个单独的关闭效果更好或不同,则基于主意见)。 Result
也专为错误处理而设计。您可以简单地创建符合enum
的{{1}},然后创建自己的错误案例。
答案 1 :(得分:-1)
Swift 5 引入了 Result<Success, Failure>
associated value
枚举[About] 这意味着您的结果可以是 success
或 failure
以及附加信息(成功结果或错误对象)。好的做法是将错误案例和成功案例作为原子任务进行管理。
优点:
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
}
}