使用Swift将一系列类保存到Firebase数据库中

时间:2016-07-06 18:20:05

标签: swift firebase firebase-realtime-database

我有一个类数组,如下所示:

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!])

显然,这只会将索引0处的类从数组myItems保存到Firebase数据库中,该数据库显示在上图中。

我的问题是,如何将整个数组保存到数据库中?使用我的代码,我只能从数组中保存1个类,并且我想将所有项目保存到数据库中,这样它们最终看起来就像一个类在图像中所做的那样。你可以将它与填充tableView进行比较,你需要使用“indexPath.row”来填充所有项而不是只有一项。我希望我足够清楚!

2 个答案:

答案 0 :(得分: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

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

Pardon拼写错误,我在飞行中写道。

答案 1 :(得分:0)

Firebase没有对数组的本机支持。如果存储数组,它实际上存储为“对象”,整数作为键名。

// we send this 
['hello', 'world']
// Firebase stores this 
{0: 'hello', 1: 'world'}

Read this post for better understanding.