我发现很多线程都有类似的问题......但我无法弄清楚我哪里出错了。
我有一个存储物品和篮子的数据库。这是一种“扫描即走”式支付应用程序。
我的Firebase数据库的结构如下:
Store_POC{
"Store_SKU_List":{
"Store_ID":{
"Item_ID":{
"item_name":
"item_sku":
"item_price":}
}
}
}
"Baskets":{
"Store_ID":{
"Auto_Gen_Basket_ID":{
"Auto_Gen_Item_ID":{
"item_name":
"item_price":
"item_sku":}
我能够输入商店和sku编号并检索与该特定项目相关联的值。这是我正在使用的代码:
import UIKit
import Firebase
import FirebaseDatabase
class FirstViewController: UIViewController {
//Firebase
var ref: FIRDatabaseReference!
//Interface Elements
//Sku Lookup
@IBOutlet weak var textStoreId: UITextField!
@IBOutlet weak var textItemSku: UITextField!
@IBOutlet weak var labelItemName: UILabel!
@IBOutlet weak var labelItemSku: UILabel!
@IBOutlet weak var labelItemPrice: UILabel!
var currentItem = [String:String]()
var currentItemModel = Item()
var activeBasket = Basket()
@IBAction func buttonAddToBasket(_ sender: UIButton) {
activeBasket.addItem(item: currentItemModel)
}
@IBAction func buttonLookUpItem(_ sender: UIButton) {
var itemData = [String:String]()
self.ref?.child("Store_SKU_List").child(textStoreId.text!).child(textItemSku.text!).observeSingleEvent(of: .value, with: {
(snapshot) in
itemData = snapshot.value as! [String:String]
print(snapshot)
print(itemData)
self.labelItemName.text = self.currentItem["item name"]
self.labelItemSku.text = itemData["id"]
self.labelItemPrice.text = itemData["item price"]
self.currentItem = itemData
self.currentItemModel.name = itemData ["item name"]
self.currentItemModel.sku = itemData["id"]
self.currentItemModel.price = itemData["item price"]
})
}
然而 - 这是我遇到的第一个问题。我无法将我从firebase中提取的数据分配给在主ViewController类中声明的变量 currentItem 。
我希望将刚刚查找的项目存储起来,以便可以“添加到购物篮”而无需再次查找所有变量。
我见过很多关于获取和访问firebase数据的教程,我相信我一直在正确地关注它们。如果是这样,为什么我不能将检索到的值分配给currentItem?
这可能是一个单独的问题......但我提到它以防万一它是相关的。
我试图将对数据库的调用分成函数。相反,我会调用getSkuInfo(sku:"123-1")
之类的东西并尝试进行查找。当我这样做时,我可以看到我正在获取值,但是信息没有离开FIRDatabase调用,并且作为函数结果发回一个空数组。