使用Firebase Model Framework Salada制作用户模型
我将介绍我通常在应用程序中采用的用户模型。
本文将介绍什么
- 安装萨拉达
- 使用Firebase建立用户模型
- 链接Firebase身份验证和用户模型
$ gem install cocoapods —预
需要Cocoapods 1.4版或更高版本。
豆荚“萨拉达”
安装完成!
让我们快速建立一个用户模型。 甚至User.swift都可以,但是由于在使用Realm创建相同的用户模型时,我不喜欢名称冲突,因此我一直在使用Firebase + User.swift。 由于Firebase Auth也有一个定义为User的类,我认为最好提供一些名称空间。
这次,我将介绍简单的配置,但可能会很好地使用它。
导入 Firebase
Firebase 扩展名 {
类 User :对象{
@objc 动态 变量名称:字符串?
@objc 动态 var thumbnailImage:文件?
让关注者:关注者= []
让朋友:朋友= []
}
}
提供用户名和缩略图并关注功能。
借助File,您可以与FirebaseStorage无缝协作。
扩展名 Firebase .User {
静态 函数 当前 ( _ completeHandler:@escaping((Firebase.User?)-> Void)){
保护用户:User = Auth.auth()。currentUser else {
completeHandler(
无 )
返回 }
Firebase.User.observeSingle(user.uid,eventType:.value,block:{(用户)
在
保护用户:Firebase.User =用户else {
_ = 试试 ? Auth.auth()。signOut()
completeHandler(
无 )
返回 }
completeHandler(用户)
})
}
公共 功能 关注 (){
Firebase.User.current {(我)
在
守卫 让我= 其他我{ 返回 }
自我 .followers.insert(me)
me.friends.insert(
自我 )
}
}
公共 功能 取消关注 (){
Firebase.User.current {(我)
在
守卫 让我= 其他我{ 返回 }
self .followers.remove(我)
me.friends.remove(
自我 )
}
}
}
您可以通过继承Relation类轻松地进行引用。
Firebase 扩展名 {
类 关注者 :Relation {}
类 朋友 :Relation {}
}
保存用户
让用户:Firebase.User = Firebase.User()
user.name =“ hoge”
user.thumbnailImage = File(数据:UIImageJPEGRepresentation(image,1))
user.save()
获取当前用户
Firebase.User.current {用户在
//做某事 }
获取另一个用户
Firebase.User.observeSingle(“ id”,eventType:.value){(用户) 在
//做某事 }
更新属性
Firebase.User.current {user.name中的用户=“更新”
}
Salada不提供更新功能。
它会监视该属性,并在设置该值时实时保存在Firebase中。
只需设置一个新值。 为什么会这样,因为Firebase可以脱机使用。
脱机时不必处理错误。 Firebase首先没有超时的概念,并且不会返回任何错误。 如果它处于脱机状态,它将被临时存储在本地,并在您重新连接到网络时与Firebase本身进行同步。
实际上,这很麻烦,并且Firebase Auth会在身份验证完成后发出称为AuthStateDidChange的通知,但实际上,在身份验证完成后创建用户之后,您实际上想要的Notification会更好。
Auth.auth()。signIn(with:credential){(authUser,error) in
警卫 让 authUser = authUser else {
打印(错误)
返回 }
//在此调用AuthStateDidChange。 Firebase.User.observeSingle(authUser.uid,eventType:.value){
如果 让用户=用户{
//只需登录 }
其他 {
//创建新用户
让 newUser:Firebase.User = Firebase.User(id:authUser.uid) ! newUser.name = authUser.displayName
newUser.save {(
_ ,错误) 在
如果 让 _ =错误{
打印(错误)
返回 }
//让我们在这里调用自己的通知。
}
}
}
}
请拥有美好的Firebase生活。