回调函数或 Post 通知

Callback functions or Post notifications

我目前正在开发登录功能,并想出了两种不同的方法,我可以在收到回复后继续前进。第一种方法是使用回调函数并将结果 return 备份到链中。另一种是post一个通知,让需要这个响应的class观察等待。你会推荐哪一个,为什么?请注意,我将对使用 AlamoFire 库的未来 HTTP 调用使用相同的方法,我试图注意正在创建的多个线程并避免任何不必要的内存使用。我相信回调可以满足这些要求,但是,我想看看大家对此的看法!提前致谢!

//来自 AlamoFire 的代码示例:

AF.request("https://httpbin.org/headers", headers: headers).responseJSON { response in
    debugPrint(response)

    //Post notification?
    //use callback?
}

Post 通知是针对应用程序中的重要事件,而不是针对每个网络调用。例如,“用户登录”可能(在某些情况下)是通知的正确候选者,因为它是一个应用程序范围的事件,可能对多个观察者感兴趣。

为什么不在所有功能中使用通知?简而言之 - 因为它们是广播。那么,当可能只有一个 class 关心它时,为什么要告诉整个应用某些功能是某些网络请求的结果呢?您还可以阅读 this post,其中讨论了不使用它的其他原因(它们围绕 UI 个用例,但它也适用于您的用例)。

但回调也不是唯一的选择。如果你只在 2 方之间进行交互,它们就很好,通常它们最适合简单的事情,不涉及复杂的逻辑或大量代码(google“swift callback hell”查看一些示例什么时候不使用回调)。还有2个选项:

  1. 观察者模式(用于通知)也可以通过协议和订阅更优雅地实现。参见 the full idea here。在这种情况下,您可以通知多个 classes(就像通知一样),但您只通知那些对结果感兴趣的人。
  2. Promises,虽然不像 JS 那样原生于 Swift,但仍然非常流行。你可以看一个例子here