gpt4 book ai didi

ios - 如何使用结果库处理 Void 成功案例(成功/失败)

转载 作者:可可西里 更新时间:2023-11-01 00:21:04 25 4
gpt4 key购买 nike

简介:

我要介绍一个 Result framework (antitypical)在我的应用程序的某些方面。例如,给出这个函数:

func findItem(byId: Int, completion: (Item?,Error?) -> ());

foo.findItem(byId: 1) { item, error in
guard let item = item else {
// Error case
handleError(error!)
return;
}
// Success case
handleSuccess(item)
}

我用这种方式实现了结果:

func findItem(byId: Int, completion: Result<Item,Error>) -> ());

foo.findItem(byId: 1) { result in
swith result {
case let success(item):
// Success case
handleSuccess(item)
case let failure(error):
// Error case
handleError(error!)
}
}

问题在成功案例什么都不返回的情况下,实现结果的正确方法是什么?像这样的东西:

func deleteItem(byId: Int, completion: (Error?) -> ());

foo.deleteItem(byId: 1) { error in
if let error = error {
// Error case
handleError(error)
return;
}
// Success case
handleSuccess()
}

在 java 中,我会实现一个结果,而在 Swift 中,正确的方法是什么

最佳答案

最好的方法正是您所做的:Error? 其中 nil 表示成功。它非常清晰和简单。

也就是说,另一个答案(也是我使用过的答案)正好在您的问题中:“如何使用 Result 处理 Void 成功案例。”成功案例通过Void,所以通过Void:

Result<Void, Error>

“无效”并不意味着“不返回任何内容”。它是 Swift 中的一种类型,一种只有一个值的类型:空元组 ()。这也恰好是类型:

public typealias Void = ()

按照惯例,我们使用Void 表示类型,使用() 表示值。在 Result 中以这种方式使用 Void 有点奇怪的一点是语法。你结束了类似的事情:

return .success(())

双括号有点难看而且有点困惑。因此,尽管这与其他使用 Result 的代码非常相似,但在这种情况下我通常只使用 Error?。不过,如果我有很多,我会考虑为它创建一个新类型:

enum VoidResult {
case .success
case .failure(Error)
}

关于ios - 如何使用结果库处理 Void 成功案例(成功/失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44067192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com