Ich möchte ein Modell erstellen, das optionale Werte hat. Ich implementierte flatmap
, um das zu erreichen. Knoten sehen so aus und imageUrl existiert nicht immer so.Firebase erstellen Modell, das optionale Werte in Swift
"Post": {
"uid": {
"autoid"{
"Text": "some text",
"Date": "some date",
"imageUrl": {
autoID1: url1,
autoID2: url2
}
},
"autoid"{
"Text": "some text",
"Date": "some date"
}
}
}
habe ich ein Modell hier
import UIKit
import Firebase
extension DataSnapshot {
var snapshots: [DataSnapshot] {
return children.allObjects.flatMap({ $0 as? DataSnapshot })
}
var string: String? { return value as? String }
var url: URL? { return string.flatMap({ URL(string: $0) }) }
var urls: [URL] { return snapshots.flatMap({ $0.url }) }
}
struct Post {
let snapshot: DataSnapshot?
var Date: String!
var imageUrl: [URL]?
var Text: String!
init(snapshot: DataSnapshot) {
self.snapshot = snapshot
self.Date = snapshot.child["Date"].string
self.imageUrl = snapshot.child["imageUrl"].urls
self.Text = snapshot.child["Text"].string
}
}
aber innerhalb init
, Fehler sagt
Wert vom Typ 'DataSnapshot' hat kein Mitglied 'Kind'
Does weiß jemand wie man das löst? Auch ist dies der richtige Weg, um Funktion wie Twitter Post mit mehreren Bildern zu erstellen und manchmal Bilder sind keine, nur Text angezeigt.
DataSnapshot verfügt nicht über das untergeordnete Mitglied https://firebase.google.com/docs/reference/swift/firebasedatabase/api/reference/Classes/DataSnapshot#value. Um also etwas aus dem DataSnapshot extrahieren zu können, könnten Sie diese Idee verwenden: 'wenn Wert = snapshot.value als? [String: Beliebige] { self.Date = Wert ["Date"] als? Schnur ?? "" } ' –
Vielen Dank für den Kommentar, aber diese Methode würde nichts zurückgeben? Zum Beispiel gibt es 5 Posts und einer von ihnen hat keinen Wert, dann sind die Posts, die angezeigt werden, nichts, weil die Werte nicht mit dem Modellobjekt übereinstimmen. Hab ich recht? – Daibaku
Ich verstehe nicht, was du meinst. Der Punkt ist "Kind" ist nicht vorhanden, dann können Sie nicht kompilieren, weil es eine benutzerdefinierte Erweiterung ist, die Sie von dieser Antwort kopiert haben: https://Stackoverflow.com/a/47844462/2450755, überprüfen Sie die letzten Kommentare darin antworte, liege ich falsch? –