前提・実現したいこと
Swiftで2択のクイズアプリを作成しています。
クイズを提示する「問題画面」と、クイズに答えた後、結果と正答を表示する「正解画面」と「不正解画面」があります。
(画面は分けたいです。)
クイズ番号ごとに、問題文・選択肢1・選択肢2・答えをFirebaseに登録しています。
現在は、下記の通り、QuestionControllerでインスタンス変数をつくり、
Firebaseから取得した値をインスタンスのプロパティの値として代入し、
他の画面で呼び出そうと考えていました。
QuestionController
1import UIKit 2import Firebase 3import FirebaseFirestore 4 5class Question: NSObject { 6 7 var db: Firestore! 8 9 static var question = Question() 10 11 var no: Int = 1 12 13 var answer: String = "answer" 14 15 func getCollection(){ 16 17 let settings = FirestoreSettings() 18 19 Firestore.firestore().settings = settings 20 db = Firestore.firestore() 21 22 db.collection("reading").whereField("no", isEqualTo: no).getDocuments() { 23 (querySnapshot, err) in 24 if let err = err { 25 print("Error getting documents: (err)") 26 } else { 27 for document in querySnapshot!.documents{ 28 if let answer = document.data()["answer"] as? String{ 29 Question.question.answer = answer 30 } 31 } 32 } 33 } 34 } 35}
しかし、
QuestionController
1Question.question.answer = answer
は、getCollection()メソッド内のみ有効であるため、
他の画面で以下のようにアクセスしても初期値が表示されます。
QuestionViewController
1import UIKit 2 3class QuestionViewController: UIViewController{ 4 5 let question = Question.question 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 question.getCollection() 10 print(question.answer) //answer(初期値)が表示される 11 }
Firebaseから取得した値を他の画面でも使えるようにするには、どのような処理をすれば良いでしょうか?
根本的な修正が必要なのかもしれませんが、ご教示いただければ大変有難いです。
なお、私はSwift初学者で、Udemyの講座(https://www.udemy.com/course/ios13_swift5_iphone_ios_boot_camp/)を半分受講した程度で、プログラミング歴も1年ほどです。
試したこと
getCollection()メソッドで、return answerとしてanswerを返り値として得た後、
変数に代入しようと考えましたが、
「firebaseからデータを呼び出す際のvoid関数の予期しないnon-void戻り値」というエラーが出ました。
以下の記事を読みましたが、他の画面でも値を使い回すという目的には合っていないと思いました。
リンク内容
以下の記事も読みましたが、取得したい値が複数種類あるので、より簡潔な処理があれば知りたいと思いました。
リンク内容
補足情報(FW/ツールのバージョンなど)
Swift
Xcode version11.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/13 01:06
2020/05/13 01:11
2020/05/14 03:07
2020/05/14 04:47
2020/05/14 05:07
2020/05/14 05:10
2020/05/14 05:23
2020/05/14 05:31