【发布时间】:2020-03-12 02:31:27
【问题描述】:
目标:将饮品订单保存到 Firebase
问题:将 [Drink] 数组转换为字典
我收到以下错误消息:
错误:'InvalidFirebaseData',原因:'(setValue:withCompletionBlock:) 无法在drinksOrdered.0009373 中存储vipeeps.Drink 类型的对象。 只能存储 NSNumber、NSString、NSDictionary 和 NSArray。'
func saveDrinkOrder(orderRef: String, venueName: String, drinksOrder: [Drink], chargeId: String, chargeObject: [String: Any], handler: @escaping(Bool) -> ()){
guard let uid = Auth.auth().currentUser?.uid else { return }
let orderNo = orderRef
let timeStamp = Date().timeIntervalSince1970
let drinksOrdered = Dictionary(uniqueKeysWithValues: drinksOrder.map {($0.posId, $0.self)}) //<---issue here: $0.self if still a Drink object
let venue = venueName
let stripeChargeResponse = chargeObject
let ref = REF_DRINK_ORDERS.child(uid).child(orderNo)
//message node values
let values = [
"dateOrdered": timeStamp,
"venueName": venue,
"timeStamp": Date().timeIntervalSince1970,
"drinksOrdered": drinksOrdered,
"stripeResponse": stripeChargeResponse] as [String : Any]
ref.setValue(values) { (error, dbRef) in
if error != nil {
print(error!.localizedDescription)
handler(false)
return
}
handler(true)
}//end setValue
}//end func
asdf
class Drink {
var posId: String?
var name: String?
var description: String?
var tags: [String]?
var unitPrice: String?
init(dictionary: [String: Any]) {
self.posId = dictionary["posId"] as? String
self.name = dictionary["name"] as? String
self.description = dictionary["description"] as? String
self.unitPrice = dictionary["unitPrice"] as? String
self.tags = dictionary["tags"] as? [String]
}//end init
}//end class
【问题讨论】:
-
看看这里给出的答案:
https://stackoverflow.com/questions/55750619/how-to-store-custom-object-in-firebase-with-swift。我会建议同样的事情,将您的 Drink 对象的基本数据保存到字典中。可以按照@Jay 在他的评论中建议的方式在 Firebase 中保存和加载对象。 -
当我有一组
[Drink]时,这很不方便,如果我只处理一个对象,那么是的,你的建议是有意义的。
标签: swift dictionary firebase-realtime-database