Also speichere ich ein Wörterbuch in meine Firebase. Das Wörterbuch befindet sich in einer benutzerdefinierten Klasse namens FoodItem. Hier ist die Linien, wo ich das Wörterbuch sparen:Firebase ruft mein Double als String in Swift iOS ab?
let favRef = self.ref.childByAppendingPath("urlhidden")
favRef.setValue(foodItem.toAnyObject())
foodItem ist ein FoodItem Objekt, hier ist der Teil meiner FoodItem Klasse, die .toAnyObject implementiert()
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]
}
also jene Bits des Codes kombiniert speichert meine Daten zu meinem Firebase. Funktioniert wie es sollte. Aber wenn ich die Daten abrufe, ist meine Preisvariable eine Zeichenkette? Ich werde erklären ...
Hier ist, wo ich die Daten abrufen:
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()
})
}
Des FoodItem Konstruktor Sie mit dem Schnappschuss zu sehen nimmt die Daten von meiner Feuerbasis und ordnet meine FoodItem Variablen auf diese Werte in meiner Feuerbasis . Hier ist der Code:
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
}
Allerdings, wenn ich meinen Code ausführen, sehe ich, dass es druckt das Doppel als String
Wie Sie sehen können, gibt es eindeutig Anführungszeichen um den Double-Variable „Preis“ . Und ich bekomme diesen Fehler:
Konnte den Wert des Typs '__NSCFString' (0xff0ee0) nicht in 'NSNumber' (0x13ff81c) umwandeln.
Mit dieser Codezeile rot markiert:
price = snapshot.value["price"] as! Double
, die innerhalb des FoodItem Konstruktor mit dem Snapshot angeordnet ist, wie ich oben geschrieben.
Irgendwelche Ideen ???
* EDIT: Es macht das gleiche für meine int Variablen. Die gleiche Fehlermeldung
Dies kann kein Problem (derzeit), aber Firebase nicht direkt Doubles unterstützen. Es unterstützt 4 Objekttypen; NSString, NSNumber, NSDictionary, NSArray. Möglicherweise möchten Sie Ihr Double in eine NSNumber für die Speicherung in Firebase verpacken. Wie es ist, speichern Sie es als eine Zeichenfolge. Es könnte ein Problem sein, wenn ein ungültiges Zeichen gespeichert wird oder vielleicht eine leere Zeichenfolge anstelle von 0. – Jay