Я новичок в Swift и Firebase, и хотел бы знать, как получить информацию пользователей от Firebase от пользователя.Swift 2.0 - получить информацию о пользователе от firebase
У меня есть «uid» Firebase, хранящийся в 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()
}
}
У меня есть класс dataservie, который делает соответствующие звонки в 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)
}
}
У меня также есть класс менеджера, который я хотел бы содержать методы, которые возвращают детали пользователей.
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
}
}
Я хотел бы посоветовать, как я создать функцию в классе менеджера, возвращает «пользователь», который заполняется из Firebase с помощью «UID» Я хранится. Может кто-то, пожалуйста, назовите меня в правильном направлении.
Прокомментируйте, если вам нужна дополнительная информация или более код.
Если ваши данные защищены правилами безопасности, вам может потребоваться authUser() –
@CodyWeaver, похоже, моя проблема не в том, что я впервые ожидал. Я могу вернуть данные с кодом комментария выше в классе менеджера. Однако я не могу хранить данные против объекта пользователя. Можете ли вы посоветовать, как я это делаю в быстром режиме (нет геттеров и сеттеров в Swift?) – Jasper
Существует ряд проблем с этим кодом: вам, вероятно, не нужно хранить пользователей uid в NSUserDefaults, поскольку текущий вход в uid всегда доступны из Firebase authData. Во-вторых, помните, что Firebase является асинхронным, поэтому вызов «return currentUser» в классе менеджера может фактически произойти * до того, как * данные были возвращены в блоке registerEventType, что может привести к сбою приложения. Похоже, что имеется много постороннего кода - если вы просто хотите получить пользовательский узел текущего пользователя и заполнить пользовательский класс, он должен составлять около 10 строк кода. – Jay