前提・実現したいこと
初めまして。現在firestoreを利用して、twitterのような、フォロー中のユーザーの投稿がみれる、ツリー構造のような実装を実現しようとしています。その際に、followUserPostの引数isuidに、コンピューテッドプロパティのuser,uidを参照したいのですが、var _ = followUserPost.followUserPost(isuid: user.uid)で実現してしまうと、投稿は読み取られるものの、その投稿が無限ループしてしまいます。1度だけその投稿を所得するにはどのような実装をすればいいでしょうか?アーキテクチャはMVVMです。
発生している問題・エラーメッセージ
投稿の無限ループ
該当のソースコード
swift
1import SwiftUI 2import SDWebImageSwiftUI 3import Firebase 4 5struct FollowUserView: View { 6 var user: FollowingData 7 @StateObject var followUserPost = FollowUserPost() 8 var body: some View { 9 ScrollView { 10 11// HStack(spacing: 10){ 12// 13// HStack(alignment: .top) { 14// 15// WebImage(url: URL(string: user.url)) 16// .resizable() 17// .renderingMode(.original) 18// .scaledToFill() 19// .frame(width: 100, height: 100) 20// .cornerRadius(10) 21// 22// VStack { 23// 24// Text(user.name) 25// .font(.title) 26// .fontWeight(.heavy) 27 28 29 30 31 /// followUserPostのisuidに、user.uidを参照したい。 32 33 34 /// 下記の実装をすると、投稿が無限ループする。 35 36 var _ = followUserPost.followUserPost(isuid: user.uid) 37 38 39 ForEach(followUserPost.posts) { post 40 41 UserPostRow(post: post) 42// 43// } 44// } 45// } 46 47 48 } 49 } 50 } 51} 52 53struct FollowUserView_Previews: PreviewProvider { 54 static var previews: some View { 55 FollowUserView() 56 } 57} 58 59 60 61class FollowUserPost: ObservableObject { 62 63 @Published var posts: [FollowPost] = [] 64 var db = Firestore.firestore() 65 66 func followUserPost(isuid: String) { 67 68 69 db.collection("posts").document(isuid).collection("hierarchyPost").limit(to: 50).getDocuments { (snap,err) in 70 71 if err != nil { 72 73 print("err (#function)") 74 75 76 } 77 78 snap!.documentChanges.forEach { (doc) in 79 80 if doc.type == .added { 81 82 83 let id = doc.document.documentID 84 let txt = doc.document.data()["txt"] as? String ?? "" 85 let like = doc.document.data()["like"] as? Int ?? 0 86 let pic = doc.document.data()["pic"] as? String ?? "" 87 let timestamp: Timestamp = doc.document.data()["timestamp"] as! Timestamp 88 89 DispatchQueue.main.async { 90 91 self.posts.append(FollowPost(id: id, txt: txt, like: like, pic: pic, timestamp: timestamp.dateValue())) 92 93 94 } 95 96 } 97 } 98 } 99 } 100 101} 102 103 104struct FollowPost: Identifiable { 105 106 var id: String 107 var txt : String 108 var like : Int 109 var pic : String 110 var timestamp: Date 111 112 113}
あなたの回答
tips
プレビュー