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

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

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

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

Swift

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

Q&A

解決済

1回答

1604閲覧

RealtimeDatabaseのkeyを配列にしてランダムで取り出したい

ninomiyanen

総合スコア21

Firebase

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

Swift

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

0グッド

0クリップ

投稿2018/08/30 10:48

RealtimeDatabaseに入っているUIDを配列にしてランダムで取り出したいです。

イメージ説明
この、1人と書いてある下のUID(このUIDは適当に作ったダミーです)を配列に入れ、ランダムで取り出したいのですが、Firebaseの公式ドキュメントを読んでもいまいち理解出来ません。

今あるコードとしては、

Swift

1 var uids: Array? = [] 2 3 func matchDatabase(){ 4 ref = Database.database().reference() 5 // データベースから誰か1人のデータを持ってくる 6 ref.child("field").child("1人").observe(DataEventType.childAdded, with: {(snapshot) -> Void in 7 8 let snapshotkey = snapshot.key as! NSDictionary 9 let uid = snapshotkey as! String 10 // 配列にuidを格納 11 self.uids?.append(uid) 12 13 // uidsからランダムにuidを取り出す 14 var index = arc4random(uids?.count) 15 16 }) 17 }

となっており、
var index = arc4random(uids?count)
の部分でエラーが発生しています。
SwiftもFirebaseも初心者のため、完全に手詰まってしまいました...。

どなたか教えていただけると幸いです。
よろしくお願いします。

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

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

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

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

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

fuzzball

2018/08/30 23:53

エラーの内容を書いて下さい。あと print(self.uids)の出力を書いて下さい。
guest

回答1

0

ベストアンサー

RealtimeDatabaseはよくわからないので主にSwiftについてだけ。
それだけでもいくつか問題ありますね。

  • arc4random()は引数をとらない関数です。引数をとるのはarc4random_uniform()です。
  • arc4random_uniform()の引数の型はUInt32ですが、uids?countInt?型です。

オプショナルなのもそうですが、Swiftは型が厳密なのでIntとUInt32も自動でキャストしません。

  • uidsはオプショナルにしたり、Arrayの型パラメータを省略する必要はありますか?

不要なオプショナルや曖昧な型は避けたほうがいいです。後若干好みが入りますがArrayは使わず[Type]を使うことをオススメします。

  • snapshot.keyはString型ですよね?NSDictionayとStringにキャストするのは間違いなく失敗しますし多分不要です。

以上の問題を解決するなら私ならこう書きます。

Swift

1var uids: [String] = [] 2 3func matchDatabase(){ 4// 略 5 let uid = snapshot.key 6 // 配列にuidを格納 7 self.uids.append(uid) 8 9 // uidsからランダムにuidを取り出す 10 var index = arc4random_uniform(UInt32(uids.count)) 11// 略 12}

投稿2018/08/31 01:52

u39ueda

総合スコア950

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

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

ninomiyanen

2018/08/31 02:36

詳しく説明までしてくださってありがとうございます! 初心者なのでこういう説明が本当にありがたいです!! おかげさまで解決しそうです!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問