2016-02-08 39 views
5

Sto implementando la mia logica di login utilizzando Firebase con solo Facebook come provider.Procedura consigliata per archiviare CurrentUser dopo l'accesso

Come posso salvare il mio CurrentUser dopo il login per poter utilizzare i dati personali durante l'esperienza dell'app in seguito?

Al momento sto utilizzando un singleton con un'istanza di User. Qualcosa di simile a questo:

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 
    } 

} 

e sto usando che Singleton in questo modo:

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) 

    } 
    ... 

} 

non lo faccio pensa che questa sia la migliore pratica. Prima di Firebase sono abituato ad avere a che fare con la logica utente integrata di Parse, che è stato molto più semplice.

risposta

1

sto affrontando il problema esatto e questo legame ha aiutato molto: http://totallyswift.com/ios-app-development-part-2/

Quello che ha fatto è stato creare un Singleton (currentUser) conforme alla classe di utente.

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! 
}