Swift 2.0-从firebase获取用户详细信息



我是Swift和Firebase的新手,想知道如何通过userId从Firebase获取用户详细信息。

我已将Firebase"uid"存储在NSUserDefauls中。

我有一个用户模型类,如下所示;

 import UIKit
 import Firebase
class User: NSObject {
var id: String?
var username: String?
var email: String?
var yogaLevel : Enums.Difficulty?

init(id: String, username: String, email: String){
    self.id = id
    self.username = username
    self.email = email
}

override init(){
    super.init()
}
}

我有一个数据服务类,它对Firebase进行相关调用;

import UIKit
import Firebase
class DataService{
static let dataService = DataService()
private var _BASE_REF = Firebase(url: "(BASE_URL)")
private var _USER_REF = Firebase(url: "(BASE_URL)/users")
var BASE_REF: Firebase {
    return _BASE_REF
}
var USER_REF: Firebase {
    return _USER_REF
}
var CURRENT_USER_REF: Firebase {
    let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String
    let currentUser = Firebase(url: "(BASE_REF)").childByAppendingPath("users").childByAppendingPath(userID)
    return currentUser!
}

func createNewAccount(uid: String, user: Dictionary<String, String>) {
    // A new user is created:
    USER_REF.childByAppendingPath(uid).setValue(user)
}

}

我还有一个manager类,我希望它包含返回用户详细信息的方法。

import UIKit
import Firebase
class UserManager: NSObject {
static var currentUser = User()
class func getCurrentUserDetails() -> User{
    // Attach a closure to read the data at our posts reference
    DataService.dataService.CURRENT_USER_REF.observeEventType(.Value, withBlock: { snapshot in
        currentUser.username = String(snapshot.value.objectForKey("username"))
        currentUser.email = String(snapshot.value.objectForKey("email"))
        currentUser.id = String(NSUserDefaults.standardUserDefaults().valueForKey("uid"))
        print(String(currentUser.username) + " " + String(currentUser.email))
        }, withCancelBlock: { error in
            print("UserManager class - getCurrentUserDetails error: " + String(error.description))
    })
    return currentUser
}

}

我想建议如何在管理器类中创建一个函数,该函数返回一个使用我存储的"uid"从Firebase填充的"user"。有人能告诉我正确的方向吗。

如果您需要更多信息或更多代码,请发表评论。

这是一个非常开放的问题,所以我的答案是方向。

当前登录的用户uid可以直接从Firebase:返回

if self.myRootRef.authData != nil {
    print(ref.authData.uid) // user is authenticated
} else {
    // No user is signed in
}

为了回答问题,假设的Firebase结构

root
  users
     uid_0
       name: "Leroy"
       email: "l.jenkins@ubrs.com"

假设用户类

class UserClass: NSObject {
    var name: String?
    var email: String?
    var uid: String?
}

然后,为了填充User类,可以使用以下代码来调用函数

self.populateUser("uid_0")

以下是从Firebase填充User类并将其添加到Users数组的函数。例如,该数组可以用于填充tableView。

func populateUser(uid: String) {
    let thisUserRef = self.usersRef.childByAppendingPath(uid)
    thisUserRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
        if snapshot.value is NSNull {
            print("snapshot was null");
        } else {
            let thisUser = UserClass()
            thisUser.name = snapshot.value.objectForKey("name") as? String
            thisUser.email = snapshot.value.objectForKey("email") as? String
            thisUser.uid = uid
            self.Users.append(thisUser)
            print("(thisUser.name!)")
        }
    })
}

Users是这样定义的类变量数组

var Users = [UserClass]()

注意1:如果DataService类中的变量本质上是全局的,那么您只需在swift项目中创建一个文件,并将它们添加到结构中即可

MyGlobalVars.swift
struct MyGlobals {
    static var rootRef = "app.firebase.com"
    static var usersRef = "app.firebase.com/users"
}

这些可以通过在任何地方访问

print("Global variable:(MyGlobals.usersRef)")

注意2:就像在Users类中一样,您可以通过init将快照传递给Users类,并让它自己填充。

thisUser.populateFromSnapshot(snapshot.value)

最新更新