使用 Appdelegate 在 IOS Swift 中为所有视图控制器创建 Firebase CRUD 方法

Posted

技术标签:

【中文标题】使用 Appdelegate 在 IOS Swift 中为所有视图控制器创建 Firebase CRUD 方法【英文标题】:Using Appdelegate to create methods for Firebase CRUD in IOS Swift for all viewcontrollers 【发布时间】:2017-02-17 03:31:04 【问题描述】:

我想知道这是否是最佳实践,是否会对我的 ios swift 应用程序造成任何问题,请注意,这是我第一次创建成熟的 IOS 应用程序,并且我主要有网络应用程序背景。

我注意到我正在针对不同的功能(聊天、将用户匹配在一起、显示用户和 Facebook 朋友的信息)执行 CRUD 任务,并使用 Firebase 来存储我的实时数据以及用于每个 ViewControllers 我都有一些类似的功能来提取或更新 Firebase 数据,但数据不同。

我还注意到,我可以通过 UIApplication 类使用之前在 AppDelegate.swift 文件中声明的函数。

我的问题是:我可以在 AppDelegate.swift 中使用类似工厂的模式(即:如果获取此数据,否则如果根据输入获取其他数据)预先声明函数,然后在我的另一个中调用这些方法视图控制器?

我主要担心的是我对 AppDelegate 普遍不熟悉,我了解如何实现这一点,并且 AppDelegate 像通知中心一样运作,但会出现延迟或数据丢失吗?

请注意,这主要是因为我正在尝试重构并稍微清理我的代码,并且我注意到仅更改 Firebase 的数据结构可能会对抓取和更新数据的函数产生负面影响,而且更改起来会容易得多从单个位置而不是在所有 ViewController 中运行。

【问题讨论】:

您应该创建一个单独的系统来处理网络请求。绝对不要放入 AppDelegate。查看 Alamofire 路由器设置或 Moya 框架以获得一些很好的示例。可能需要更长的时间来设置,但会让你的代码更干净 类似这样的东西:github.com/Alamofire/Alamofire#crud--authorization?还有更喜欢莫亚吗?它有一个看起来像的 Alamofire 层 这确实是您的偏好,我只是将这些作为示例列出来查看。你也可以只创建一个类来保存你的网络功能,如果你想让它成为一个单例。有很多关于这个主题的东西你可以查看,但至少你应该有一个单独的类来保存你的网络代码,这样它就在一个地方,而不是在多个视图控制器中重写相同的代码。 Moya 使用 alamofire 发出请求,它的作用是在发出请求之前组织您如何设置请求。虽然它有点高级 在少数情况下您会处理网络请求。例如,如果我在应用程序委托之外使用 Firebase 查询来验证当前用户,以确定我是否需要加载登录页面和应用程序的主页,那么在加载主页之前会有一点延迟,因为我有等待登录页面加载并检查。如果我在应用程序委托中包含此验证,则主页会在看到登录页面之前加载。但对于大多数其他人来说,最好遵循 MVC 模式。 【参考方案1】:

感谢 JustinM(参见上面的 cmets),我使用 https://github.com/Moya/Moya 创建了一个 FirebaseDB.swift 层,该层用作查询用户数据等并将其存储到 Firebase 中的单一层。不必求助于 AppDelegate.swift

【讨论】:

以上是关于使用 Appdelegate 在 IOS Swift 中为所有视图控制器创建 Firebase CRUD 方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Storyboards 将数据模型分配给 appDelegate 中的视图控制器 - ios

在 iOS 项目中删除 AppDelegate

如何将 CoreLocation 值从一个 VIewController 传递到 iOS 中的 AppDelegate?

在 ios8 中使用 appdelegate 暂停 spritekit 游戏

swift ios - 如何从 AppDelegate 在 ViewController 中运行函数

iOS使用UIManagedDocument添加初始核心数据文件,而不是appdelegate