我试图将每个加密货币的每个密钥的值保存到单独的数组中。
例如,' coinAmount'关键,我想得到一个类似于[" 1.0," 2.0"]和' coinName'作为["比特币","以太坊"]等5个键中的每一个。
我的尝试:
let index = NSIndexPath(item: 0, section: 0)
if portfolioCoinFullNameString.count > 0 {
print("PortfolioVC: Number of Coins in Portfolio > 0")
let coinRef = ref.child("\(portfolioCoinFullNameString[index.row])")
coinRef.observe(DataEventType.value) { (snapshot) in
for child in snapshot.children {
let snap = child as! DataSnapshot
let key = snap.key
let value = snap.value
print("key = \(key) ,, value = \(value!)")
if key == "coinAmount" {
self.firebaseCoinAmountArray.append(Double(value as! String)!)
} else if key == "coinName" {
self.firebaseCoinNameArary.append(value as! String)
} else if key == "coinPrice" {
self.firebaseCoinPriceArray.append(Double(value as! String)!)
} else if key == "coinSymbol" {
self.firebaseCoinSymbolArray.append(value as! String)
} else if key == "coinTotalFiat" {
self.firebaseCoinTotalFiatArray.append(Double(value as! String)!)
} else {
print("PortfolioVC: Key does not match anything!")
}
}
}
} else {
print("PortfolioVC: Number of Coins in Portfolio !> 0")
}
这适用于添加第一枚硬币,但是当我尝试添加第二枚硬币时,2个值会附加到数组中,因此它包含3个,如果我添加第三个硬币,则会附加3个值。不确定为什么它会循环通过每个硬币?
编辑: 我在StackOverflow周围搜索并遇到了另一种方法:
let index = NSIndexPath(item: 0, section: 0)
if portfolioCoinFullNameString.count > 0 {
print("PortfolioVC: Number of Coins in Portfolio > 0")
let coinRef = ref.child("\(portfolioCoinFullNameString[index.row])")
coinRef.observe(DataEventType.value) { (snapshot) in
let value = snapshot.value as? NSDictionary
let coinName = value?["coinName"] as? String ?? ""
self.firebaseCoinNameArary.append(coinName)
print("aaaaaa:\(self.firebaseCoinNameArary)")
}
} else {
print("PortfolioVC: Number of Coins in Portfolio !> 0")
}
但仍有问题,当在阵列中添加任何硬币作为第二个元素时,该阵列包含3x第一枚硬币而不是仅仅两枚第一枚硬币和第二枚硬币。我知道我可以做一个if语句来检查数组是否已经包含该名称,如果它不添加它,但我如何使用数值作为theres可能硬币可能具有相同的价格。? p>
Edit2:一直在考虑它,如果我只是观察值而不是更改,它会工作吗,保存所有的数组,用它们填充单元格。然后,如果用户编辑了'coinAmount'应用中的值,它会在Firebase中更新,但不会在阵列中更新。然后,当用户关闭应用程序/注销时,下一次显示组合时,它将从firebase中重新提取包含更新数字的值?
Edit3:此外,投资组合下的节点称为比特币'等等,如果我称他们为coin1,coin2,coin3等,我将如何获得该路径并获得说币3的关键和价值?有没有办法只获得' protfolio'下的所有节点的值?一气呵成?
我的想法是,一旦我将所有firebase数据保存到数组中,我将使用所有数据填充tableview单元格。
感谢任何帮助:)
谢谢,
杰里米
答案 0 :(得分:0)
为了做到这一点,不要使用for循环使用.childAdded
我将提供一个例子
database.ADD THE ENTIRE PATH.child("portfolio").observe(DataEventType.childadded) { (snapshot) in
let key = snapshot.key
let value = snapsnapshot.value as? NSDictionary
//Add everything that is in your firebase
let coinAmount = value?["coinAmount"] as? String
let cointName = value?["coinName"] as? String
//.... Added all the variables for the database
//use the variables above and append the array and it will work!
}
}