gpt4 book ai didi

swift - 如何比较所选行的答案并从 firebase 中检索答案?

转载 作者:可可西里 更新时间:2023-11-01 02:06:35 24 4
gpt4 key购买 nike

我目前正在开发一款 Wine 搜索器应用程序。基本上,我用食物搭配来搭配 Wine 。用户选择他最喜欢的食物。我有我的 firebase 数据库存储标有该特定 Wine 的名称和类型的 Wine 数据。这是我在 firebase 中的 json 结构。

Wines:
Wine1:
Name: Catena Zapata Malbec
Type: Bold Red
Wine2:
.......... etc.

我有另一个以前的 View Controller 用于选择最喜欢的食物。例如,如果用户选择红肉,则相关的打字将是“Bold Red”。所以,我做了一个 switch case,对于 case:1(选择的是红肉),引用进入“Type”并搜索“Bold Red”,最后打印出该红酒的所有相关结果。

class Wine: NSObject{
var name: String?
var type: String?
var foodChoice: String?
}


class ResultViewController: UITableViewController {

var ref: FIRDatabaseReference!
var refHandle: UInt!
var wineList = [Wine]()
var intPassed: Int!
let cellId = "cellId"

override func viewDidLoad() {

super.viewDidLoad()

navigationItem.title = "Results"
ref = FIRDatabase.database().reference()
fetchWine()
}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return wineList.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellId)
cell.textLabel?.text = wineList[indexPath.row].name

return cell
}


func fetchWine(){
switch intPassed {
case 0:
refHandle = ref.child("Wines").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let wine = Wine()
wine.name = dictionary["name"] as! String?
wine.type = dictionary["type"] as! String?

wine.setValuesForKeys(dictionary)
self.wineList.append(wine)

print (wine.name, wine.type)

DispatchQueue.main.async {
self.tableView.reloadData()
}
}
})
case 1:
refHandle = ref.queryOrdered(byChild: "Type").queryEqual(toValue: "Bold Red").observe(.value, with: {(snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let wine = Wine()
wine.name = dictionary["name"] as! String?

wine.setValuesForKeys(dictionary)
self.wineList.append(wine)

print (wine.name)

DispatchQueue.main.async {
self.tableView.reloadData()
}

}
})
default:
print("nothing")

}
}
}

我可以打印案例 0 的数据。但是如果我想将所选类型的答案与数据库中的类型进行比较,我将无法获得所需的数据。是 refHandle 的引用错误吗?

这是案例 0 的打印结果。我只是为了确保 firebase 正常工作。其他选项只是我数据库中的其他 Wine 。

0
Optional("Catena Zapata Malbec") Optional("Bold Red")
Optional("Merlot") Optional("Medium Red")
Optional("Pinot Noir") Optional("Light Red")

求助!非常感谢!!

最佳答案

问题

我观察到的是您的 refHandle 似乎是正确的。但是您在观察 block 中访问了错误的数据。

解决方案

你的 dictionary 在 case 1 中看起来像这样:

["Wine1": {
name = "Catena Zapata Malbec";
type = "Bold Red";
}]

这意味着,在案例 1 中,您需要访问另一个字典才能仅访问 Wine 的名称 Catena Zapata Malbec

case 1:
refHandle = ref.queryOrdered(byChild: "Type").queryEqual(toValue: "Bold Red").observe(.value, with: {(snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {

// Here access your name of the wine in the node
if let wine1Dictionary = dictionary["Wine1"] as? [String: AnyObject] {
let wine = Wine()
wine.name = wine1Dictionary["name"] as! String?


wine.setValuesForKeys(wine1Dictionary)
self.wineList.append(wine)

print(wine.name)
}
}
})

关于swift - 如何比较所选行的答案并从 firebase 中检索答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42453436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com