是可选的,闭包可以抛出,是的。 –本–中

是可选的,闭包可以抛出,是的。 但是,没有语言功能可用于处理回调中的错误。 让我解释:

想象一下,我将闭包传递给了进行网络调用的函数。 如果该网络调用失败(例如,我收到HTTP 503 ),此功能将如何告诉我? 我看到三种方式:

  1. 回调有两个参数:成功值和错误值,两者都是可选的。 如果成功,则错误为nil ;如果错误,则成功为nil 。 这是不理想的,因为两者都可能nil或都不为nil ,在这种情况下这是无意义的
  2. 该函数接受两个回调:一个在成功时传递值,一个在失败时传递错误值。 这样比较好,但是仍然可以同时调用两者,这是胡说八道。 另外,它体积大,并且没有利用Swift的闭包语言功能,例如在仅需要1个闭包的函数上省略括号。
  3. 回调采用一个参数,该参数是非可选的Result类型。 这是理想的,因为它永远不会同时具有成功或失败状态。 此外,您可以利用语言功能,例如省略括号和模式匹配。 同意,到今天为止,它体积很大。 但是,我看到了将来可以简化的一种方式,尤其是在标准库中提供了Result时。