前提・実現したいこと
tertailのAPIを叩き、質問一覧をTableViewに表示させたいです(Alamofire SwiftyJSONを使用)。
現状、teratailの質問のIDをFirestoreに下図の通り配列として保存しています。
今回はこの配列からIDを取り出し、各質問の詳細を表示させたいです。
発生している問題・エラーメッセージ
まずFirestoreからデータを取り出し、それをfor文を用いて表示させようと考えています。
しかしこのコードですと、配列から取り出した最後のIDの質問しか表示させることができない状況です。
考え方としては、for文でIDを取り出したら、都度APIを叩いてデータを取得するという流れになると思うのですが、それをうまくコードに落とし込むことができず苦慮しております。
恐れ入りますが、解決策をご教示いただけませんでしょうか?
該当のソースコード
func fetchFavoriteQuestions() { print("favfecth") if let myId = Auth.auth().currentUser?.uid { let userRef = Firestore.firestore().collection("users").document(myId) userRef.getDocument { (snap, error) in if let error = error{ print("Error getting question ID") } else { guard let data = snap?.data()?["likes"] as? [Int] else { return } for likesArray in data { print("https://teratail.com/api/v1/questions/(likesArray)") Alamofire.request("https://teratail.com/api/v1/questions/(likesArray)").responseJSON { response in self.questions = [] guard let object = response.result.value else { return } let json = JSON(object) let id = json["question"]["id"].intValue let title = json["question"]["title"].stringValue let tags = json["question"]["tags"].arrayObject let displayName = json["question"]["user"]["display_name"].stringValue let photo = json["question"]["user"]["photo"].stringValue let created = json["question"]["created"].stringValue let isAccepted = json["question"]["is_accepted"].boolValue self.questions.append(QuestionEntity(id: id, title: title, tags: tags as? [String] ?? [], displayName: displayName, photo: photo, created: created, isAccepted: isAccepted)) print(self.questions) self.notify() print("通知") } } } } } }
回答1件
あなたの回答
tips
プレビュー