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

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

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

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

896閲覧

struct内のコンピューテッドプロパティを参照したい。

saiaa

総合スコア0

Cloud Firestore

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/11/07 09:19

編集2020/11/07 09:20

前提・実現したいこと

初めまして。現在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}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問