Auth.auth()类型是什么?如何在Firebase DataService中提取该实例?
提取Firebase Auth实例实现DRY的可行方案
当然可行!这正是践行DRY(Don't Repeat Yourself)原则的好思路,我来帮你理清类型问题并优化代码:
首先明确类型
Firebase Swift SDK已经对Objective-C底层做了完整桥接,Auth.auth()的Swift类型就是Auth,同理其他核心实例的类型也很清晰:
Auth.auth()→AuthDatabase.database().reference()→DatabaseReferenceStorage.storage().reference()→StorageReference
你不用纠结Objective-C源码,按住Command点击Swift代码里的Auth.auth(),就能看到SDK提供的Swift接口定义,里面会明确标注类型。
优化你的DataService实现
你可以把这些Firebase核心实例封装到单例类中,确保全局复用且不会重复创建实例(Firebase本身的这些方法也是返回单例),调整后的代码示例:
class FBData { // 全局唯一的单例实例 static let shared = FBData() // Firebase 核心服务实例 let auth: Auth = Auth.auth() let databaseRootRef: DatabaseReference = Database.database().reference() let storageRootRef: StorageReference = Storage.storage().reference() // 私有初始化方法,防止外部创建多个实例 private init() {} }
使用方式
在项目任何地方,你都可以通过单例直接访问这些实例,不用重复调用Auth.auth()这类方法:
// 访问Auth实例获取当前用户 let currentUser = FBData.shared.auth.currentUser // 访问数据库根节点并监听数据 FBData.shared.databaseRootRef.child("users").observe(.value) { snapshot in // 处理数据逻辑 }
这样既实现了代码复用,也让你的数据服务层结构更清晰。
内容的提问来源于stack exchange,提问作者jgravois
相关产品推荐
相关产品推荐

