Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift将类数组保存到Firebase数据库中_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

使用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不知道这个问题的意思。也许你可以问一个新问题并详细说明,这样我们就可以提出解决方案。