使用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生活。