Firebaseからデータを取得する際にOptionalな値が存在するため、アプリがクラッシュしないようにflatmapを用いてイニシャライズしたいです。Jsonはこのような形です。"imageUrl"は各post毎に存在する場合としない場合があります。
"Post": { "uid": { "autoid"{ "Text": "some text", "Date": "some date", "imageUrl": { autoID1: url1, autoID2: url2 } }, "autoid"{ "Text": "some text", "Date": "some date" } } }
そこでこのようにModelを作成しました。
ですが、initでこのようなエラーが返ってきます。
Type 'NSEnumerator' has no subscript members
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.children["Date"].string self.imageUrl = snapshot.children["imageUrl"].urls self.Text = snapshot.children["Text"].string } }
このように試したり、いろいろ調べましたが、まだ解決できていません。
let dic = snapshot.value as? [String:Any] self.Date = dic["Date"] as! String
正しいイニシャライズの仕方を教えていただけると幸いです。
よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。