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

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

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

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

Q&A

解決済

1回答

876閲覧

swiftで自作クイズ投稿アプリを作りたい

oeiqgfodgfhps

総合スコア35

Swift

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

0グッド

0クリップ

投稿2020/06/07 16:36

ポートフォリオ用に自作のクイズを投稿できるアプリを作っています。

データはFirebaseに書き込み、読み込む際は下記のコードを書きました。
クイズの入力フォームの値を一時的にUserDefaultの中に保存しています。

swift

1 //押されたセルの問題を正解の選択肢とし、クイズの情報をDBに挿入する 2 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 3 let i = indexPath.row + 1 4 var count = quizArray.count 5 let correctNumber = i 6 let message = "選択肢(i)を正解の選択肢としてクイズを登録しますか?" 7 let alert = UIAlertController(title: "QuizApp", message: message, preferredStyle: .alert) 8 let yesAction = UIAlertAction(title: "はい", style: .default, handler: { (UIAlertAction) in 9 count = count + 1 10 let quizDB = Database.database().reference().child("quizs") 11 let quizInfo = ["id":count,"genreId":self.genreNumber,"problem":self.User.object(forKey: "QuizContent"),"select1":self.User.object(forKey: "select1"),"select2":self.User.object(forKey: "select2"),"select3":self.User.object(forKey: "select3"),"correctNumber":correctNumber,"userId":Auth.auth().currentUser?.uid,"answerCount":0,"correctAnswerCount":0] 12 quizDB.childByAutoId().setValue(quizInfo) 13 }) 14 let noAction = UIAlertAction(title: "いいえ", style: .default, handler: { (UIAlertAction) in 15 print("「いいえ」が選択されました!") 16 17 }) 18 alert.addAction(noAction) 19 alert.addAction(yesAction) 20 21 present(alert, animated: true, completion: nil) 22 } 23

そしてクイズの読み込みの際は以下のコードの書き方をしました。

swift

1 //更新のたびにデータを取得し、配列の中に挿入する 2 func fetch(){ 3 4 let ref = Database.database().reference().child("quizs") 5 6 ref.observe(.childAdded) { (snapShot) in 7 let snapShotdata = snapShot.value as! AnyObject 8 var quiz = Quizzes() 9 quiz.id = snapShotdata.value(forKey: "id") as! Int 10 quiz.problem = snapShotdata.value(forKey: "problem") as! String 11 quiz.select1 = snapShotdata.value(forKey: "select1") as! String 12 quiz.select2 = snapShotdata.value(forKey: "select2") as! String 13 quiz.select3 = snapShotdata.value(forKey: "select3") as! String 14 quiz.correctNumber = snapShotdata.value(forKey: "correctNumber") as! Int 15 quiz.userId = snapShotdata.value(forKey:"userId") as! Int 16 quiz.answerCount = snapShotdata.value(forKey:"answerCount") as! Int 17 quiz.correctAnswerCount = snapShotdata.value(forKey:"correctAnswerCount") as! Int 18 self.quizArray.append(quiz) 19 20 } 21

データの読み取りの際の書き方はこちらを参考にして書きました。
Quizzezクラスはクイズの各データを入れておくために作りました。
他のクラスで使えるようにと配列に入れてみたのですが、よく考えたらここで宣言した配列を他のクラスでは使えないということに気づきました。

どのようにすれば他のクラスでフェッチしたデータを扱えるようになるのでしょうか?
ご回答よろしくお願いいたします。

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

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

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

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

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

TsukubaDepot

2020/06/09 03:51

ご提示のコードだけでは > 他のクラスで使えるようにと配列に入れてみたのですが、よく考えたらここで宣言した配列を他のクラスでは使えないということに気づきました。 という部分を検証することができません(後半のコードだけでは quizArrayがどこで宣言されているか不明なので)。 もう少し全体像がわかるようなコードをご提示いただくことは可能でしょうか。
guest

回答1

0

自己解決

配列を使用したいクラスで、データをフェッチさせることで実現いたしました。

投稿2020/06/09 03:55

oeiqgfodgfhps

総合スコア35

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

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

TsukubaDepot

2020/06/09 03:56

解決したようでよかったです。
oeiqgfodgfhps

2020/06/09 03:57

解決へご協力してくださりありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問