Xcode 14提示‘DataSnapshot无data成员’但项目可正常运行,求解决方案
问题背景
在Xcode 14中使用Firebase获取数据表列表时,代码可正常编译运行,但Xcode持续报错:Value of type 'DataSnapshot' has no member 'data'。已尝试清理项目构建、删除Derived Data、重置包缓存,均未解决问题。
相关代码:
database.child(tableName).child(userID).observe(.value) { snapshot in guard let children = snapshot.children.allObjects as? [DataSnapshot] else { return } self.recipesArray = children.compactMap { snapshot in do { var recipe = try snapshot.data(as: RecipeModel.self) recipe.id = snapshot.ref.key return recipe } catch { print(error) return RecipeModel() } } }
解决方案
data(as:)是FirebaseDatabaseSwift扩展提供的方法,报错核心原因是该扩展未被正确引入或配置,按以下步骤排查:
确认依赖已添加
如果使用Swift Package Manager,需在项目依赖中添加FirebaseDatabaseSwift(而非仅FirebaseDatabase);如果使用CocoaPods,确保Podfile中包含:pod 'FirebaseDatabaseSwift'添加后执行对应依赖更新操作(SPM在Xcode中更新包,CocoaPods执行
pod install)。正确导入模块
在使用data(as:)的代码文件顶部,必须同时导入两个模块:import FirebaseDatabase import FirebaseDatabaseSwift仅导入
FirebaseDatabase无法访问Swift扩展提供的data(as:)方法。检查SDK版本兼容性
data(as:)方法在Firebase SDK 8.0及以上版本才可用,确保当前使用的Firebase SDK版本满足要求。若版本过低,执行更新:- CocoaPods:
pod update Firebase - SPM:在Xcode的项目依赖中,将Firebase相关包更新到最新兼容版本。
- CocoaPods:
清理并重建项目
关闭Xcode,删除Derived Data路径(~/Library/Developer/Xcode/DerivedData),重新打开项目后执行Cmd+Shift+K清理构建文件夹,再重新构建项目。
验证修改
确保上述步骤完成后,重新运行项目,Xcode的报错应该会消失,data(as:)方法可正常使用。
内容的提问来源于stack exchange,提问作者Qazi Ammar

