Swift 4集成Firebase Auth时FIRUser与Core Data User实体冲突解决咨询
解决Firebase FIRUser与CoreData User实体的命名冲突问题
这个命名冲突的坑我之前在集成Firebase认证和CoreData时也踩过,给你几个实用的解决方案,按推荐程度排序:
1. 给CoreData实体重命名(最推荐)
这是最彻底的解决方式,从根源上避免命名冲突:
- 打开你的CoreData模型文件(
.xcdatamodeld) - 选中
User实体,在右侧检查器里把实体名称改成LocalUser或AppUser这类不会和第三方库重名的名字 - 把codegen改回
Class Definition(Xcode会自动生成对应的NSManagedObject子类) - 之后在代码里,CoreData的实体用
LocalUser,Firebase的用户用FIRUser,完全不会混淆,代码可读性也更高
2. 手动生成CoreData的User子类(保留原实体名)
如果你不想改实体名称,可以这样操作:
- 保持codegen设置为
Manual/None - 右键CoreData模型文件,选择
Create NSManagedObject Subclass...,按照向导生成User类的子类文件(Objective-C的.h和.m或Swift的.swift) - 生成后,确保在模型文件的实体设置里,把类字段指定为你的App模块下的
User(比如YourAppName.User) - 注意:在使用Firebase的用户对象时,一定要写完整的
FIRUser类型,不要省略成User,避免编译器混淆
3. 使用模块名明确区分类型(应急方案)
如果暂时不想修改实体或生成子类,可以在代码里通过模块名来明确指定类型:
- 当你需要引用CoreData的
User时,写成YourAppTargetName.User(替换成你的App目标名称) - Firebase的用户类型保持写
FIRUser,这样编译器就能准确区分两个不同的类
另外补充一点:Xcode 9.2的编译器确实对命名冲突的处理不够智能,如果项目允许的话,升级到更高版本的Xcode也能缓解这类问题,但上面的方案在Xcode 9.2里完全适用。
内容的提问来源于stack exchange,提问作者user3689341
相关产品推荐
相关产品推荐

