teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

微修正

2019/09/13 16:45

投稿

hameji
hameji

スコア1380

answer CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  また、ボタンを押したら表示(問題・選択肢)を変えるプログラムの作り方は
24
24
  ```Swift
25
- var currentNo: Int = 0
25
+ var currentNo: Int = 1
26
26
  ```
27
27
  などで、現在の問題番号を持たせ、
28
28
  ボタンを押したら、問題番号を配列の要素の番号として利用し、viewの更新をさせることですね。
@@ -51,14 +51,14 @@
51
51
  }
52
52
 
53
53
  private func answerButtonPressed(_ sender: Any) {
54
- if self.correctAnswerLabel.alpha = 0.0 { // 答えが表示されていない時
54
+ if self.correctAnswerLabel.alpha == 0.0 { // 答えが表示されていない時
55
- self.correctAnswerLabel.alpha = 1.0
55
+ self.correctAnswerLabel.alpha = 1.0 // 答えの表示をさせる
56
56
  } else { // 答えが表示されている時
57
57
  if currentNo != 3 { // 答えが表示されている時で、最後の問題に来て、ボタンを押されたら、segueする
58
58
  self.performSegue( ... // 省略
59
59
  } else { // 最後の問題じゃない時の動作
60
60
  currentNo = currentNo + 1 // 現在の問題番号を1個進める
61
- showQuestion(no: currentNo) // 1個進めた番号の問題, 選択を表示する
61
+ showQuestion(no: currentNo) // 1個進めた番号の問題, 選択を表示する
62
62
  }
63
63
  }
64
64
  }

1

情報追加

2019/09/13 16:45

投稿

hameji
hameji

スコア1380

answer CHANGED
@@ -11,8 +11,65 @@
11
11
  ![イメージ説明](6c91419ddf38ca87bce8cbe870b334ed.png)
12
12
 
13
13
  特定の問題のセットの取得には
14
+ ```Swift
14
- db.collection("Question").whereField("setName", isEqualTo: "地理").order(by: "no")などで取得し、配列・独自クラスに保存。
15
+ db.collection("Question").whereField("setName", isEqualTo: "地理").order(by: "no")
16
+ ```
17
+ などで取得し、配列・独自クラスに保存。
15
18
 
16
19
  ユーザーの答えの記録は実際の答えと、正誤は最低でも保存したいですよね。
17
- 正誤の内容なもので、相対スコアなどを保存する場合はcorrectではなく、
20
+ 正誤のないようなもので、相対スコアなどを保存する場合はcorrectではなく、
18
- scoreで点数を保存するようにすれば良いのではないでしょうか?
21
+ scoreで点数を保存するようにすれば良いのではないでしょうか?
22
+
23
+ また、ボタンを押したら表示(問題・選択肢)を変えるプログラムの作り方は
24
+ ```Swift
25
+ var currentNo: Int = 0
26
+ ```
27
+ などで、現在の問題番号を持たせ、
28
+ ボタンを押したら、問題番号を配列の要素の番号として利用し、viewの更新をさせることですね。
29
+
30
+ ```Swift
31
+ メンバ変数
32
+ var currentNo: Int = 1
33
+ let questions = [
34
+ ["1", "野菜はどれですか?", "リンゴ", "いちご", "みかん", "いちご"], // No, 質問, 選択肢1, 選択肢2, 選択肢3, 答え
35
+ ["2", "お米の品種名でないものはどれ?", "ほしのひかり", "ななつぼし", "はるみ", "ほしのひかり"],
36
+ ["3", "ギネスにも認定されているもっとも栄養価が高い果物は?", "バナナ", "栗", "アボガド"]
37
+ ]
38
+
39
+ func viewDidLoad() {
40
+ showQuestion(no: currentNo)
41
+ }
42
+
43
+ private func showQuestion(no: Int) {
44
+ self.progressLabel.text = String(no) + "/" + String(questions.count) // 進捗用表示、これで「1/3」などと表示される
45
+ self.QuestionNoLabel.text = questions[no-1][1] // questionsの配列のno番目(例えばno=1なら要素0(=1個目の配列)で、その[1]なので要素2(0,1と数えるから), つまり"野菜はどれですか?"
46
+ self.answerButton1.setTitle(questions[no-1][2] , for: .normal)
47
+ self.answerButton2.setTitle(questions[no-1][3] , for: .normal)
48
+ self.answerButton3.setTitle(questions[no-1][4] , for: .normal)
49
+ self.correctAnswerLabel.alpha = 0.0 // 毎回表示時に答えをalpha 0(透明に戻す)
50
+ self.correctAnswerLabel.text = questions[no-1][5]
51
+ }
52
+
53
+ private func answerButtonPressed(_ sender: Any) {
54
+ if self.correctAnswerLabel.alpha = 0.0 { // 答えが表示されていない時
55
+ self.correctAnswerLabel.alpha = 1.0
56
+ } else { // 答えが表示されている時
57
+ if currentNo != 3 { // 答えが表示されている時で、最後の問題に来て、ボタンを押されたら、segueする
58
+ self.performSegue( ... // 省略
59
+ } else { // 最後の問題じゃない時の動作
60
+ currentNo = currentNo + 1 // 現在の問題番号を1個進める
61
+ showQuestion(no: currentNo) // 1個進めた番号の問題, 選択を表示する
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ とりあえず、大まかなコードを示しました。
68
+ 他にも
69
+  ・答えを保存する、
70
+  ・データの保存構造体orクラスを作る
71
+  ・質問/選択肢/正解をfirestoreからDLし、データ構造体・クラスに保存する
72
+  ・答えずに進む/戻るボタンの実装
73
+  ・答えを選んだ時の動作正解時○や誤りの時×の表示
74
+ などなど、さらに考えて実装しないといけないことがあると思いますが、
75
+ そこは考えたり、調べたりするのも力になるので、試行錯誤してみてくださいね。