gpt4 book ai didi

ios - 如何将模型数据对象添加到 Firebase 数据库

转载 作者:IT王子 更新时间:2023-10-29 05:51:54 25 4
gpt4 key购买 nike

我有两个问题:

  1. 我知道如何使用简单的键值对将常规对象添加到 Firebase,但如何添加用户对象?

  2. 在我的 UserAccount 对象中,我不确定 UserAcct 的第二个初始化方法。我应该使用 init(snapshot: FIRDataSnapshot){} 添加到 Firebase 还是应该坚持使用常规的 init 方法?

我的用户模型对象:

import Foundation
import UIKit
import Firebase
import FirebaseDatabase

class UserAccount{

var userID: String
var email: String
var creationDate: String

init(userID: String, email: String, creationDate: String){

self.userID = userID
self.email = email
self.creationDate = creationDate
}//end init

//Is this second init necessary?
init(snapshot: FIRDataSnapshot) {
userID = snapshot.value!["userID"] as! String
email = snapshot.value!["email"] as! String
creationDate = snapshot.value!["creationDate"] as! String
}

}//END class

我的用户注册类(class):

    import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase

class CreateAccountController: UIViewController{

@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!


var dbRef: FIRDatabaseReference!

//Array to hold users
var userAcct = [UserAccount]()


override func viewDidLoad() {
super.viewDidLoad()

//Firebase Ref
self.dbRef = FIRDatabase.database().reference()
}

//Button to sign the user up
@IBAction func signUpButtonPressed(sender: UIButton) {


FIRAuth.auth()?.createUserWithEmail(emailTextField.text!, password: passwordTextField.text!, completion: {

(user, error) in

if error != nil{
print(error?.localizedDescription)
}else{

let emailAddress = self.emailTextField.text!
let currentUserID: String = (FIRAuth.auth()?.currentUser?.uid)!
let accountCreationDate = FIRServerValue.timestamp()

self.userAcct =[UserAccount(userID: currentUserID, email: emailAddress, creationDate: accountCreationDate)]


self.dbRef.child("Users").child("UserID: \(currentUserID)").child("Account-Creation-Date").setValue([\\How to add my self.userAcct model object in here? Should I add it to an array])
}
})
}

最佳答案

我建议您创建一个这样的协议(protocol):

protocol DictionaryConvertible {
init?(dict:[String:AnyObject])
var dict:[String:AnyObject] { get }
}

请注意,这是使用可选的初始化程序,这意味着它可能会失败并返回 nil。我用它来确保字典中需要的所有键值对都确实存在,否则返回 nil。现在您可以像这样向您的 UserAccount 类添加一致性:

class UserAccount: DictionaryConvertible {

var userID: String
var email: String
var creationDate: String

init(userID: String, email: String, creationDate: String){
self.userID = userID
self.email = email
self.creationDate = creationDate
}

// DictionaryConvertible protocol methods
required convenience init?(dict: [String:AnyObject]) {
guard let userID = dict["userID"] as? String, email = dict["email"] as? String, creationDate = dict["creationDate"] as? String else {
return nil
}
self.init(userID: userID, email: email, creationDate: creationDate)
}
var dict:[String:AnyObject] {
return [
"userID": userID,
"email": email,
"creationDate": creationDate
]
}
}

注意:我使用了您已经创建的初始化程序来删除样板代码。要与 Firebase 交互,只需像这样初始化您的 UserAccount:

let user:UserAccount? = UserAccount(dict: snapshot?.value as! [String:Anyobject])

要回答您的第一个问题,您可以像这样将您的对象写入 firebase:

ref.child("Users").child(user!.userID).setValue(user!.dict)

您不能只将任何类型的对象写入 firebase(仅 NSNumber(包括 BOOL)、NSDictionary、NSArray、NSString、nil/NSNull 以删除数据),因此您必须将用户对象“转换”为字典。

这种方法的优点在于它很灵活,因此您可以通过添加对协议(protocol)的一致性来使用任何数据对象(当您使用结构而不是类时尤其容易,因为这样您就可以使用扩展来添加对协议(protocol)的一致性).您甚至可以将其用于任何类型的与字典一起使用的数据库,而无需进行太多更改。此外,您应该确保以安全的方式处理所有这些可选项并避免那些 '!'只要有可能。

关于ios - 如何将模型数据对象添加到 Firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38412337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com