陣列-問答題(PTT鄉民實測)

畫面上顯示2個 label,一個問題 label,一個答案 label。2個 button,一個 ”下一題 ”button,一個 ”顯示答案 ” button。全部10個問題,問題會循環。一開始答案 label空白,點選 ”顯示答案 ”button後才會顯示答案。

這次的作業要練習 Array(陣列) 和Dictionary 的結合~我的問答題是”PTT鄉民實測”

首先~先建立@IBOutlet連線

@IBOutlet weak var countLabel: UILabel! //第幾題
@IBOutlet weak var questionLabel: UILabel! //題目
@IBOutlet weak var answerLabel: UILabel! //答案
@IBOutlet weak var fox1: UIImageView! //未答的狐狸圖
@IBOutlet weak var fox2: UIImageView! //回答問題的狐狸圖

再來建立一個跟class很類似的struct

裡面宣告 question跟 answer兩個變數~初始值都讓它們放空

struct Qna{
var question = ""
var answer = ""
}

接著列出一個存取題目跟答案的陣列~並宣告變數count的初始值為0

讓題目可以從陣列中的第一個值開始讀取

var count = 0
var qnaArray = [Qna(question: "3樓的樓上是幾樓?", answer: "2樓"),
Qna(question: "看到哪三個數字需下跪?", answer: "118"),
Qna(question: "年過30保有童貞的男性為?", answer: "魔法師"),
Qna(question: "PTT戰神是?", answer: "蘇美"),
Qna(question: "obov是哪個教派的教主?", answer: "母豬教"),
Qna(question: "8+9=?", answer: "八家將"),
Qna(question: "2沒壞,猜一字?", answer: "噓"),
Qna(question: "PTT女板又名?", answer: "灑花板"),
Qna(question: "Z>B是什麼意思?", answer: "利大於弊"),
Qna(question: "鄉民爆料文的起始句是?", answer: "我夢到")]

上面是比較進階的寫法

也可以寫成下面這樣

var qnaArray = [["question":"3樓的樓上是幾樓?", "answer":"2樓"],
["question":"看到哪三個數字需下跪?", "answer":"118"]]

接著是SHOW ANSWER跟NEXT QUESTION兩個按鈕

用@IBAction連個線

秀答案的時候~將[有對話框的狐狸圖]顯示~[沒對話框的狐狸圖]隱藏

以及顯示呈現答案用的Label

//秀答案
@IBAction func answerBtn(_ sender: Any) {
fox1.isHidden = true
fox2.isHidden = false
answerLabel.isHidden = false
}

按下NEXT QUESTION的按鈕時

(1)讀取陣列資料的順位+1~

當讀取超過第10筆資料時~從頭開始~將count歸0

(2)執行nextQuestion()函式

(3)將[有對話框的狐狸圖]隱藏~並顯示[沒對話框的狐狸圖]

//下一題
@IBAction func nextBtn(_ sender: Any) {
count += 1
if count == 10{
count = 0
}
nextQuestion()
fox1.isHidden = false
fox2.isHidden = true
}

nextQuestion()函式裡要寫些什麼呢?

(1)questionLabel.text = qnaArray[count].question

從陣列中取出題目~把值指派給questionLabel

(2)answerLabel.text = qnaArray[count].answer

從陣列中取出答案~把值指派給answerLabel

(3)顯示題號(因為陣列順序是從編號0開始,所以count+1就會是現在的題號)

(4)用 answerLabel.isHidden = true 來隱藏上一題的答案

func nextQuestion(){
questionLabel.text = qnaArray[count].question
answerLabel.text = qnaArray[count].answer
countLabel.text = "\(count+1)"
answerLabel.isHidden = true
}

完工!!