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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

681閲覧

【SwiftUI】文字が無限に取得される現象を解決したい

Chiaki1111

総合スコア15

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/05/10 14:43

前提・実現したいこと

FireStoreから検索してデータを取得し、それをViewに表示させたかったのですが、
どうやらデータを繰り返し取得しているようで、画面に無限にデータが表示されてしまいます。

どのようにコーディングすれば解決するでしょうか。ご教示ください。

該当のソースコード

SwiftUI

1struct PhotoDetailBottomView: View { 2 @ObservedObject var observed = Observer() 3 var onePhoto: PhotoEntity 4 5 var body: some View { 6 self.observed.pickup(onePhoto: self.onePhoto) ←pickupのfunctionでFireStoreからデータを取得後、データを表示させようと思った 7 8 return VStack{ 9 ForEach(observed.status){ comment in 10 CommentView(oneComment: comment) 11 } 12 } 13 } 14} 15 16 17class Observer: ObservableObject{ 18 @Published var status = [Entity]() 19 20 func pickup(one: Entity) { 21 let db = Firestore.firestore() 22 23 db.collection("Theme").addSnapshotListener{(snap, error) in 24 if error != nil { 25 print("(String(describing: error?.localizedDescription))") 26 } 27 28 for i in snap!.documentChanges { 29 let id = i.document.documentID 30 let comment = i.document.get("comment") as? String ?? "" 31 let userName = i.document.get("userName") as? String ?? "" 32 let userImageURL = i.document.get("userImageURL") as? String ?? "" 33 self.status.append(CommentEntity(id: id, comment: comment, userName: userName, useImageURL: userImageURL)) 34 } 35 } 36 } 37} 38

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

status.append のところでfor文回すたびに
更新されてしまっているので
一旦[Entity]型の一次変数の配列に追加していって
出来上がった(for文回し終わった)配列を最後に
statusに代入してみたら行けそうかなと思いました。

for文の前に let tempStatus: <Entity> = []
status.append... => tempStatus.append...
// for文の後で最後に出来上がった配列を代入(更新が一度だけになるはず?)
status = tempStatus

投稿2020/05/10 16:52

TakuyaAso

総合スコア1361

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

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

Chiaki1111

2020/05/12 13:35

試してみたら解決しました、有難うございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問