简介:
我在我的应用程序的某些点引入了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)
}
字符串
我用Result实现它:
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!)
}
}
型
Question当success case不返回任何结果时,正确的实现方法是什么?。类似于:
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中,我会实现一个Result,在Swift中正确的方法是什么?
4条答案
按热度按时间hs1rzwqc1#
最好的方法就是你所做的:
Error?
,其中nil
表示成功。它非常清晰和简单。也就是说,另一个答案(也是我用过的)正好在你的问题中:“如何用Result处理Void成功案例。”成功案例传递
Void
,所以传递Void
:字符串
“Void”并不意味着“什么都不返回”。它是Swift中的一种类型,一种只有一个值的类型:空元组
()
。这也恰好是类型:型
按照惯例,我们使用
Void
表示类型,使用()
表示值。在Result
中使用Void
的语法有点奇怪。你最终会得到这样的结果:型
双括号有点难看,有点令人困惑。因此,尽管这与其他使用
Result
的代码很好地并行,但在这种情况下,我通常只使用Error?
。如果我有很多这样的代码,我会考虑为它创建一个新类型:型
bpzcxfmw2#
您可以添加此扩展,以简化您的生活。
字符串
Gists
rbl8hiat3#
我发现Rob的回答非常有趣和聪明。我只是想贡献一个可能的工作解决方案来帮助他人:
字符串
6qqygrtg4#
试试这个
请注意,这是一个示例,您可以根据测试进行更改
字符串
呼唤
型