将Swift 5新的Result类型与泛型一起使用

Swift在其最新版本中引入了一种新类型,即Result。

结果是一个通用类型,它采用成功类型和错误类型,在编写API时会很方便,以帮助您减少编写代码的数量。

因此,如您所见,它比这更清晰易读:

因此,让我们使用这种新的Result类型创建一个API:

想象一下,您必须以以前用来处理此问题的旧方法执行此操作:

因此,我认为我们可以同意使用Result类型比以前使用的旧方法更简洁,更易于阅读。

如您所见,完成关闭是Result 。 待办事项是成功处理程序,错误是失败处理程序。

当您要调用闭包时,必须使用枚举让Result知道您要传递的数据是成功(.success)还是失败(.failure)?

现在,这种方法是好的,但是有一些问题,那就是该功能是单一用途的。 它仅支持待办事项响应类型,不支持其他类型,并且使用此功能,您必须将函数复制并粘贴为您拥有的许多响应类型,这不好。

那么我们该怎么做呢?

我们将使用泛型来支持我们想要的所有类型的数据类型,只要这些类型符合Codable协议即可。

现在,通过这种方法,我们可以使用所需的所有数据类型,而不必再复制和粘贴代码了!

让我们谈谈此函数的实际工作原理:

第一部分是:

这是一个通用函数,采用的类型应符合Codable协议的类型。

然后,如您在闭包定义中看到的那样,我们将T用作Result的成功处理程序,在响应的解码过程中,我们将T.self用作响应的数据类型。

那么我们如何处理给定的响应? 让我们来看看:

因此,正如您所看到的,我们应该指出响应的类型为Result ,因此swift可以理解这一点,除非您看到一个错误,告诉您swift无法理解T的类型。

之后,我们在响应上使用开关,我们可以处理失败和成功案例,并且由于您的响应是枚举,因此我们必须处理这两种情况,除非swift抱怨该开关必须详尽无遗。

多亏了新的Result类型和泛型,我们才能够编写一个干净而健壮的API,支持各种数据类型,这太好了!

如您在上面的代码中看到的,我现在想要一个待办事项数组而不是单个待办事项,因此我只需要将待办事项更改为[Todo]就可以了! 不再需要。

希望对您有所帮助,谢谢您的阅读。