質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Q&A

0回答

389閲覧

【SwiftUI】【FireStore】FireStoreのデータを取得しながらViewの遷移をしたい

Chiaki1111

総合スコア15

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

0グッド

0クリップ

投稿2020/05/26 15:35

編集2020/05/28 14:39

前提・実現したいこと

下記のようなデータ構成でFirestoreにデータが格納してあり、
下記のような遷移を実現したいです。
感覚的にはよく使いそうな遷移だと思うのですが、どのように実現するのが良いのか分からず、
どなたかにご教示いただきたいです。

【データの構成】
Collection("Theme")→document()→各documentにCollection("Photo")が含まれる

【実現したいViewの遷移】
Themeの情報が含まれたView→そのThemeのPhotoが表示されるView

該当のソースコード

こんなコードを試してみましたが、表示されませんでした。
この方法でなくても、実現したいViewの遷移ができれば教えていただきたいです。

SwiftUI

1 2//Themeの情報が含まれたView 3import SwiftUI 4 5struct ThemeView: View { 6 @ObservedObject var themeList = ThemeObserver() 7 8 var body: some View { 9 VStack{ 10 List(themeList.status){ theme in 11 NavigationLink(destination: PhotoView(theme: self.theme)){ 12 ThemeView(oneTheme: theme) 13 } 14 } 15 } 16 } 17} 18 19//UserのPhotoが表示されるView 20struct PhotoView: View { 21 var theme : ThemeEntity 22 var ObservedObject var photoList = PhotoObserver() 23 var body: some View { 24 photoList.pickup(theme: theme) 25 26 return ScrollView{//ScrollViewを外すとなぜか表示されるようになる 27 VStack{ 28 ForEach(self.status,id: .self){photo in 29 Text(photo.title)//例 30 } 31 } 32 } 33 } 34} 35 36//FireStoreからThemeを取得するObservableObject 37class ThemeObserver:ObservableObject { 38 @Published var status = [ThemeEntity]() 39 40 init() { 41 let db = Firestore.firestore() 42 db.collection("Theme").addSnapshotListener{(snap, error) in 43 if error != nil { 44 print("(String(describing: error?.localizedDescription))") 45 } 46 for i in snap!.documentChanges { 47 let id = i.document.documentID 48 let themeImageURL = i.document.get("themeImageURL") as? String ?? "" 49 ... 50 51 self.status.append(ThemeEntity(id: id, themeImageURL: themeImageURL, ...)) 52 } 53 } 54 } 55 } 56} 57 58 59 60//FIreStoreからfuncでPhotoを取得するObservableObject 61import Foundation 62import FirebaseFirestore 63import SwiftUI 64 65class PhotoObserver: ObservableObject{ 66 @Published var status = [PhotoEntity]() 67 68 func pickup(theme: ThemeEntity) { 69 let db = Firestore.firestore() 70 71 db.collection("Theme").document("(oneTheme.id)").collection("Photos").addSnapshotListener{(snap, error) in 72 if error != nil { 73 print("(String(describing: error?.localizedDescription))") 74 } 75 76 var tempStatus: [PhotoEntity] = [] 77 78 for i in snap!.documentChanges { 79 let id = i.document.documentID 80 let title = i.document.get("title") as? String ?? "" 81 .... 82 83 tempStatus.append(PhotoEntity(id: id, title: title,...)) 84 } 85 self.status = tempStatus 86 } 87 } 88} 89 90 91 92

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問