使用Swift将类数组保存到Firebase数据库中
我有一个类数组,如下所示:使用Swift将类数组保存到Firebase数据库中,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我有一个类数组,如下所示: var myItems = [myClass]() class myClass: NSObject { var a: String? var b: String? var c: String? var d: String? } 我想要的是将名为myItems的数组保存到我的数据库中,并使每个类都位于数据库中的personal部分中。基本上,我希望每个类都像图中的“Eko”类: 为了澄清,在“Eko”之后,应该显示数组myItems中
var myItems = [myClass]()
class myClass: NSObject {
var a: String?
var b: String?
var c: String?
var d: String?
}
我想要的是将名为myItems的数组保存到我的数据库中,并使每个类都位于数据库中的personal部分中。基本上,我希望每个类都像图中的“Eko”类:
为了澄清,在“Eko”之后,应该显示数组myItems中的所有其他类。为了实现图片演示的内容,我使用了以下代码:
let data = self.myItems[0]
let currU = FIRAuth.auth()?.currentUser?.uid
let userRef = self.ref.child("users").child(currU!).child(data.a!)
userRef.updateChildValues(["a": data.a!, "b": data.b!, "c": data.c!, "d": data.d!])
显然,这只会将索引0处的类从数组myItems保存到Firebase数据库中,如上图所示
因此,我的问题是,如何将整个数组保存到数据库中?使用我的代码,我只能从数组中保存一个类,我希望将所有项保存到数据库中,以便它们最终看起来与图像中的一个类相同。您可以将其与填充tableView进行比较,在tableView中,您需要“indexPath.row”来填充所有项,而不是仅填充一项。我希望我足够清楚 无法将类保存到Firebase中。但是类的结构类似于字典(属性和值,如键:值对等) 通常应避免使用Firebase中的阵列-它们的功能有限,无法访问单个元素,对于任何更改,您必须重新写入整个阵列 通常首选使用使用childByAutoId创建父键名称的结构 最简单的解决方案是简单地向类添加智能,这样它就可以编写一个字典,然后保存自己 创建一个用户类
UserClass
var name = String()
var food = String()
func saveToFirebase() {
let usersRef = myFirebase.child(users)
let dict = ["name": self.myName, "food", self.myFood]
let thisUserRef = usersRef.childByAutoId()
thisUserRef.setValue(dict)
}
}
和数组来存储它们
var usersArray = [Users]()
填充数组
var aUser = UserClass()
aUser.name = "Leroy"
aUser.food = "Pizza"
usersArray.append(aUser)
var bUser = UserClass()
bUser.name = "Billy"
bUser.food = "Tacos"
usersArray.append(bUser)
然后遍历数组,保存每个用户
for user in usersArray {
user.saveToFirebase()
}
这将导致
users
-Ykasokokkpoad
name: Leroy
food: Pizza
-YJlaok9sk0sd
name: Billy
food: Tacos
这和你想要的结构非常相似。创建此结构还有许多其他方法。例如,您可以用代码编写整个词典,然后一次性全部写出
请原谅我的打字错误,这是我动态写的。Firebase对数组没有本机支持。如果存储一个数组,它实际上会被存储为一个“对象”,以整数作为键名
// we send this
['hello', 'world']
// Firebase stores this
{0: 'hello', 1: 'world'}
你把“对象”和“类”混淆了吗?我对编程很陌生,当我说“类”时,我可能是指对象。但是myClass不是一个类吗?
myClass
是一个类。但是,惯例是用大写字母命名类型(类、结构、协议和枚举)。更符合惯例的名称是MyClass
。类是创建对象的蓝图var myItems=[MyClass]()
创建一个空数组来存储类型为MyClass
的对象。对象有一个小写的第一个字母。在Android中,我注意到我们可以直接传递对象。为什么斯威夫特不一样?@Satyam不知道这个问题的意思。也许你可以问一个新问题并详细说明,这样我们就可以提出解决方案。