ポートフォリオ用に自作のクイズを投稿できるアプリを作っています。
データは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クラスはクイズの各データを入れておくために作りました。
他のクラスで使えるようにと配列に入れてみたのですが、よく考えたらここで宣言した配列を他のクラスでは使えないということに気づきました。
どのようにすれば他のクラスでフェッチしたデータを扱えるようになるのでしょうか?
ご回答よろしくお願いいたします。
ご提示のコードだけでは
> 他のクラスで使えるようにと配列に入れてみたのですが、よく考えたらここで宣言した配列を他のクラスでは使えないということに気づきました。
という部分を検証することができません(後半のコードだけでは quizArrayがどこで宣言されているか不明なので)。
もう少し全体像がわかるようなコードをご提示いただくことは可能でしょうか。
回答1件
あなたの回答
tips
プレビュー