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

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

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

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

2965閲覧

[Swift]チャットアプリでトークルーム一覧を表示する際の流れがつかめない

Soul3725

総合スコア21

Firebase

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/12/06 08:39

編集2019/12/13 01:22

開発と質問に至った背景

現在大学の卒業研究(制作)の一環としてチャットアプリの制作を行ってます。

アプリの大まかな内容としては、
「数あるイベントの中からあるイベントに参加意思を示したユーザーに対し該当イベントのアナウンスなどを行うチャットルームへのアクセスを可能にする」
というものです。

私が考えた流れとしては、

①ユーザーがイベントに参加意思を示す(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にアプローチしていくにあたり上記の方法でいいのかがわかりません。

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

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

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

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

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

thyda.eiqau

2019/12/06 12:04

現状試してみたコードは無いということでしょうか?漠然と意見を募るような質問には回答がつきにくいです。まずやってみて、問題が生じた際に解決策を求めるような使い方をされたほうがよいかと思いますが……
hameji

2019/12/08 14:36 編集

そもそも大学の卒業研究?でしたら、 大学の先生・先輩・後輩等に相談する・聞くのがいいのではないでしょうか?
Soul3725

2019/12/13 01:24

@thyda.eiqau様 返信が遅れてすみません。 今週あまり時間が取れず進捗が少ないのですが実践したことを追記しましたのでご確認いただけると幸いです。
Soul3725

2019/12/13 01:31 編集

@hameji様 返信が遅れてすみません。 所属ゼミの教授は別分野の専門で自分が好き勝手やらせてもらってる形なので相談することができません。 また他の教授でもOnsenUIでの制作経験しかない教授しかおらずSwiftに詳しい教授はいません。 また自分の周囲にもSwiftを用いた開発を行ってる人はいないためこのサービスで先人の知恵を借りるしかできない状況です。このサービスで質問してる人に身近な人に聞けというのは前提崩壊なのでお察しください。。。
guest

回答1

0

ベストアンサー

正直、どういう設計でやったらいいかという質問には回答しづらいですね……
最終形に行きつくまでの道筋はいくらでもあるので、ここで質問しても回答者ごとにバラバラの設計思想があって結局混乱するだけだと思います。

所属ゼミの教授は別分野の専門で自分が好き勝手やらせてもらってる形なので相談することができません。

また他の教授でもOnsenUIでの制作経験しかない教授しかおらずSwiftに詳しい教授はいません。
また自分の周囲にもSwiftを用いた開発を行ってる人はいないためこのサービスで先人の知恵を借りるしかできない状況です。

設計に関する質問は正直言語はあんまり関係ないので教授に相談したほうがよいですね。「OnsenUIでの制作経験しかない」というのはかなり怪しいですが……「最近は」OnsenUIしか触ってない、という意味であることを祈ります。

__NSArrayMNSMutabuleArray です。Objective-Cにおける配列という理解でとりあえず大丈夫です。確かSwiftでもJSONをパースしたらNSDictionaryとNSArrayが出来上がったような記憶があるので、そのへんの処理(がどうなってるかはわかりませんが)で __NSArrayM が出てきてるんじゃないかなと思います。
問題なく Array にキャストできているのであれば、気にしなくてよいです。

投稿2019/12/13 02:22

thyda.eiqau

総合スコア2982

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

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

Soul3725

2019/12/13 04:31

回答ありがとうございます! 鵜呑みではなく方向性を得られればと思い質問した次第ですので差し支えなければ設計思想を知りたいです。 残念ながらアプリ開発に関してSwiftは全くの専門外のようです。。。 別分野からAndroidなどに片足突っ込んでるみたいな教授が多いのでかなり悲惨です。笑 問題なさそうであればこのまま行こうと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問