【发布时间】:2017-11-24 20:57:38
【问题描述】:
所以我正在将字典保存到我的 Firebase。该字典位于我创建的名为 FoodItem 的自定义类中。这是我保存字典的行:
let favRef = self.ref.childByAppendingPath("urlhidden")
favRef.setValue(foodItem.toAnyObject())
foodItem 是一个 FoodItem 对象,这是我的 FoodItem 类中实现 .toAnyObject() 的部分
var key: String
var ref: Firebase?
var name: String
var description: String
var minCal: Int
var maxCal: Int
var containsNuts: Bool
var vegetarian: Bool
var price: Double //**NOTE THAT PRICE IS A DOUBLE**
func toAnyObject()->[String:AnyObject]{
return ["name":self.name,
"price":self.price,
"description":self.description,
"minCal":self.minCal,
"maxCal":self.maxCal,
"containsNuts":self.containsNuts,
"vegetarian":self.vegetarian]
}
因此,这些代码组合在一起可以将我的数据保存到我的 Firebase。正常工作。但是当我检索数据时,我的价格变量是一个字符串?我会解释...
这是我检索数据的地方:
func getCurrentOrder(){
let uid = ref.authData.uid
ref = Firebase(url: "urlhidden")
ref.observeEventType(.Value, withBlock: { snapshot in
var newItems = [FoodItem]()
for item in snapshot.children {
let foodItem = FoodItem(snapshot: item as! FDataSnapshot)
newItems.append(foodItem)
}
self.order = newItems
self.tableView.reloadData()
})
}
您在快照中看到的 FoodItem 构造函数从我的 firebase 中获取数据,并将我的 FoodItem 变量分配给我的 firebase 中的这些值。这是代码:
init(snapshot: FDataSnapshot) {
key = snapshot.key
name = snapshot.value["name"] as! String
price = snapshot.value["price"] as! Double //**NOTE STILL A DOUBLE**
description = snapshot.value["description"] as! String
minCal = snapshot.value["minCal"] as! Int
maxCal = snapshot.value["maxCal"] as! Int
containsNuts = snapshot.value["containsNuts"] as! Bool
vegetarian = snapshot.value["vegetarian"] as! Bool
ref = snapshot.ref
}
如您所见,Double 变量“price”周围有明显的引号。 我得到这个错误:
无法将“__NSCFString”(0xff0ee0) 类型的值转换为“NSNumber”(0x13ff81c)。
这行代码以红色突出显示:
price = snapshot.value["price"] as! Double
它位于 FoodItem 构造函数中,上面有我发布的快照。
有什么想法???
*编辑:它对我的 int 变量做同样的事情。同样的错误信息
【问题讨论】:
-
这可能不是问题(目前),但 Firebase 不直接支持 Doubles。它支持4种对象类型; NSString、NSNumber、NSDictionary、NSArray。您可能需要考虑将您的 double 包装到 NSNumber 中,以便存储到 Firebase 中。实际上,您将其存储为字符串。如果存储了无效的字符或者可能是空字符串而不是 0,这可能是一个问题。
标签: ios string swift firebase double