我正在制作一个需要大量功能的 Firebase 项目,包括身份验证、数据库和存储。我认为在每个 View Controller 中引用数据库太费力了,所以我正在制作一个 Firebase 管理器类来处理上传/下载/身份验证过程。
import Foundation
import Firebase
class FirebaseManager {
var uid: String?
var databaseRootRef: DatabaseReference?
var storageRootRef: StorageReference?
var authentication: Auth?
init() {
}
func initialize() {
uid = Auth.auth().currentUser?.uid
databaseRootRef = Database.database().reference()
storageRootRef = Storage.storage().reference()
authentication = Auth.auth()
}
func isAuthenticated() -> Bool {
return authentication?.currentUser != nil
}
func registerUserWith(name: String, email: String, password: String, completionHandler: (@escaping (User?, Error?) -> Void)) {
authentication?.signIn(withEmail: email, password: password, completion: { (user, error) in
completionHandler(user, error)
})
}
}
我有两个问题:
我什至不确定这是否是好的编程习惯。我没有看到很多在线教程这样做。但是,我个人认为这很好,因为 (a) 创建我的类是为了让它们有一个独特的目的。我的 View Controller 不需要担心 firebase 的工作 (b) 它使我的很多代码可重用并节省了很多行 (c) 我只是认为它允许我更容易地编辑任何与 firebase 相关的方法,因为现在我只需要编辑一个地方而不是 20 个地方
假设这是良好的编程习惯。我应该如何实现这个类?我现在正在做的是在每个 View Controller 文件中创建一个实例并在每个文件中初始化它们。或者,我可以 (a) 使类的所有成员和方法成为静态的,这样我就可以直接访问它们而无需初始化对象 (b) 不在每个 View Controller 中初始化对象,而是通过 segue 传输传递一个对象。哪种设计方法比较好
附言我有单独的初始化方法的原因是,如果我在 viewDidLoad 之前或定义对象时初始化对象,程序会崩溃,因为尚未创建 Firebase 引用。
非常感谢!
最佳答案
我建议不要使用静态/单例模式。
您可以改用子类化。
我的意思是,例如,您可以创建 FirebaseViewController
,它处理与 FirebaseManager
的基本交互。
使用单例的问题是您无法清楚地了解数据何时发生变化。
顺便说一句,改用计算属性。这是 Swift 风格:
var isAuthenticated: Bool {
return authentication?.currentUser != nil
}
关于ios - Swift:我应该为 Firebase 管理器类使用静态成员吗?好的程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921162/