使用Swift将类数组保存到Firebase数据库

3

我有一个类的数组,长这样:

var myItems = [myClass]()

class myClass: NSObject {
    var a: String?
    var b: String?
    var c: String?
    var d: String?
}

我想要的是将名为myItems的数组保存到我的数据库中,并且每个类都在数据库中的个人部分内。基本上,我希望每个类看起来像这张图片中的“Eko”类: enter image description here 为了澄清,在“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!])

显然,这只会将数组myItems中索引为0的类保存到Firebase数据库中,如上图所示。
我的问题是,如何将整个数组保存到数据库中?使用我的代码,我只能保存数组中的一个类,并且我想保存所有项目到数据库中,以便它们最终看起来与图像中的一个类相同。您可以将其与填充tableView进行比较,其中需要“indexPath.row”以填充所有项目而不仅仅是一个。我希望我表达清楚了!

1
你是否将“对象”一词与“类”混淆了? - Alexander
我对编程还比较新,当我说“类”时,我可能指的是对象。但是myClass不是一个类吗? - Markus Johansson
myClass 是一个类。然而,约定俗成的做法是将类型(类、结构体、协议和枚举)命名为大写字母开头。更加符合惯例的名称应该是 MyClass。类是创建对象的蓝图。var myItems = [MyClass]() 创建一个空数组来存储类型为 MyClass 的对象。对象的首字母小写。 - Alexander
2个回答

6
您不能将一个类保存到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

这个结构与您想要的结构非常相似。有许多其他创建此结构的方法。例如,您可以在代码中制作整个字典,并一次性将其全部写出。

请原谅我的错别字,我是临时写的。


在Android中,我注意到我们可以直接传递对象。为什么Swift不一样呢? - Satyam
@Satyam 不确定那个问题的意思。也许您可以提出一个新问题并详细说明,以便我们可以提供解决方案。 - Jay

0
Firebase没有原生支持数组。如果您存储一个数组,它实际上会被存储为一个“对象”,其中整数作为键名。
// we send this 
['hello', 'world']
// Firebase stores this 
{0: 'hello', 1: 'world'}

阅读此帖以加深理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接