開発と質問に至った背景
現在大学の卒業研究(制作)の一環としてチャットアプリの制作を行ってます。
アプリの大まかな内容としては、
「数あるイベントの中からあるイベントに参加意思を示したユーザーに対し該当イベントのアナウンスなどを行うチャットルームへのアクセスを可能にする」
というものです。
私が考えた流れとしては、
①ユーザーがイベントに参加意思を示す(eventの該当イベント内entry_usersの配列にユーザーのIDを追加する)
②entry_userに自身のuIDが入ってるイベントを絞り出す
(indexOf(uID)でnilが返ってこないものを取得??)
③UITableViewに②で該当したイベントを表示させる
④イベントのセルをタップするとchatroomの該当イベントのログにアクセスする
(申し訳ありませんが上記の流れで出てくる値は下記Firestoreをご参照ください)
と頭の中で描いたまではいいものの②から③にかけての絞り出し方であったり表示のさせ方をいまいちイメージできずにいます。
よろしければ②、③の流れに関して良いアイデアがありましたらご教授ください。
またそもそも○○は非効率なのでよくないなどもありましたら教えていただけると幸いです。
不足している回答に必要な情報がありましたら追記しますので教えていただけると幸いです。
実装目標
Firestore内にある数あるチャットルームの中から自分のuIDがチャット参加可能ユーザーとして登録されているモノを全て抜き出しUITableViewControllerに挿入する。
使用外部環境
Firebase
┣Authentication
┗Cloud Firestore
Firestore
users{ uID{ //Authenticationでログインした際に割り振られるuIDです。 ID: displayName: screenName: //Twitterログインを採用しており、ユーザー情報を保存しています。 } … } event{ (イベントの種類){ (イベント名){ info{ //イベントに関する情報 } entry_users{ //イベントに参加するユーザーのuIDをarrayで格納。 } } } } chatroom{ (イベントの種類){ (イベント名){ (ランダムID){ //ここら辺は試行錯誤前なので適当です。 sender: //送り主 message: //メッセージ timestamp: //送信日時 } } } }
思考錯誤したこと(2019/12/13追記)
②について。
uIDはドキュメント”entry_user”内のフィールド”users”にArray型で格納されているためまず取得する方法を模索しました。
公式ドキュメントを参考にArray型が取得できないか実践してみました。
まず上記リンクを参考に記述、取得したDictionary型から”users”をdataDescriptionにセットするよう書き換えました。
Swift
1let dataDescription = document.data()!["users"]!
するとdataDescriptionをprintすると下記が表示されました。(uIDは仮でA,B,Cの3つを用意しました)
( A, B, C )
自分の知ってるArray型は[]で囲まれているもののみだったのでtype(of: dataDescription)で型を調べたところ"__NSArrayM"と表示されました。
調べましたが正直いい意味がわからなくArray型の一種ということしか理解できなかったので次はArray型にキャストしてみました。
Swift
1let dataDescription = document.data()!["users"]! as! Array<String>
そして再度printすると無事配列を読み込むことができました。
[A,B,C]
とりあえず②の初期の段階ですがこれから各イベントのentry_userにアプローチしていくにあたり上記の方法でいいのかがわかりません。
回答1件
あなたの回答
tips
プレビュー