ForEach は View 専用なので、普通に swift の for ループを使って for theme in observed.status { ... } とすれば良いのでは。なお、SwiftUI よく分かってませんが、init() の中でやるとエラーになりますね…。
前提・実現したいこと
FireStoreから取得したデータ(ThemeObserver)のうち、statusが"announcement"のデータだけ取り出したいですが、どうしてもエラーが発生してしまいます。
すいませんが、理由と対策をご教示ください。
発生している問題・エラーメッセージ
Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
該当のソースコード
SwiftUI
1import Foundation 2import FirebaseFirestore 3import SwiftUI 4 5class ThemeObserver: ObservableObject { 6 @Published var status = [Theme]() 7 8 init() { 9 let db = Firestore.firestore() 10 db.collection("Theme").addSnapshotListener{(snap, error) in 11 if error != nil { 12 print("(String(describing: error?.localizedDescription))") 13 } 14 for i in snap!.documentChanges { 15 if i.type == .added{ 16 let id = i.document.documentID 17 let status = i.document.get("status") as? String ?? "" 18 19 self.status.append(Theme(id: id, status: status)) 20 } 21 } 22 } 23 } 24} 25 26class OpenAnnouncementObserver: ObservableObject { 27 @ObservedObject var observed = ThemeObserver() 28 @Published var themeList: [String] 29 init() { 30 ForEach(observed.status){ theme in ←ここでエラー発生 31 if theme.status == "announcement" { ←ここでエラー発生 32 self.themeList.append(theme.id) 33 } 34 } 35 } 36} 37 38 39struct Theme: Identifiable { 40 var id: String 41 var status: String 42}
あなたの回答
tips
プレビュー