オプションの値を持つモデルを作成したいと思います。 これを実現するためにflatmap
を実装しました。このようなノードの外観であり、毎回imageUrlは存在しません。スウィフトで任意の値を持つモデルを作成する
"Post": {
"uid": {
"autoid"{
"Text": "some text",
"Date": "some date",
"imageUrl": {
autoID1: url1,
autoID2: url2
}
},
"autoid"{
"Text": "some text",
"Date": "some date"
}
}
}
は、私はここでモデルを作成し
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
}
}
しかしinit
の内側に、エラーがタイプの
値を言う 'DataSnapshot' はメンバー '子'
んを持っていません誰もこれを解決する方法を知っていますか? また、複数の画像を含むツイッターポストのような機能を作成するための正しい方法です。画像が表示されない場合もあり、テキストのみが表示されます。
DataSnapshotにはメンバーの子がありません(https://firebase.google.com/docs/reference/swift/firebasedatabase/api/reference/Classes/DataSnapshot#value)。したがって、DataSnapshotから何かを抽出するには、このアイデアを使用します。 'もしlet value = snapshot.value as? [String:Any] { self.Date = value ["Date"] as?文字列?? "" } ' –
コメントありがとうございますが、このメソッドは何も正しく戻りませんか?たとえば、5つの投稿があり、そのうちの1つに価値がない場合、値がモデルオブジェクトと一致しないため、表示する投稿は何も表示されません。私は正しいですか? – Daibaku
あなたは何を意味するのか分かりません。ポイントは 'child''ではないので、コンパイルできません。これは、この回答からコピーしたカスタム拡張です:https://stackoverflow.com/a/47844462/2450755、その最後のコメントを確認してください答え、私は間違っていますか? –