登录后存储CurrentUser的最佳做法

gia*_*oli 6 singleton facebook login firebase swift

我正在使用Firebase 实现我的登录逻辑,只有Facebook作为提供者.

如何CurrentUser在登录后保存我以便在以后的应用体验中使用个人数据?

目前我正在使用带有实例的单例User.像这样的东西:

CurrentUser.swift

class CurrentUser {

    static let i: CurrentUser = CurrentUser()

    var cUser: User?

    private init() {

    }

    func setCurrentUser(u: User)    {
        cUser = u
    }

    func getCurrentUser() -> User {
        return cUser!
    }

    func clearUser()    {
        cUser = nil
    }

    func userIsLogged() -> Bool {
        return cUser != nil
    }

}
Run Code Online (Sandbox Code Playgroud)

而我正在以这种方式使用那个单身人士:

LoginViewController.swift

class LoginViewController: UIViewController {
    ...
    func createCurrentUser(authData: FAuthData)    {

        let u = User(uid: authData.uid, displayName: authData.providerData["displayName"] as! String, email: authData.providerData["email"] as! String)

        u.wrapperFromFacebookData(authData.providerData)

        ref.childByAppendingPath("users").childByAppendingPath(u.uid).setValue(u.toDict())

        CurrentUser.i.setCurrentUser(u)

    }
    ...

}
Run Code Online (Sandbox Code Playgroud)

我不认为这是最好的做法.在Firebase之前,我习惯于处理Parse内置用户逻辑,这非常容易.

小智 2

我面临着确切的问题,这个链接有很大帮助: http ://totallyswift.com/ios-app-development-part-2/

他所做的是创建一个符合 User 类的单例(currentUser)。

class var currentUser: User
{
    struct Static
    {
        static var instance: User?
    }

    if Static.instance == nil
    {
        if let load: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey(kUserDataKey)
        {
            Static.instance = User(data: load as [String: AnyObject])
        }
        else
        {
            Static.instance = User()
        }
    }

    return Static.instance!
}
Run Code Online (Sandbox Code Playgroud)