陣列-問答題(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 = 0var 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].answercountLabel.text = "\(count+1)"
answerLabel.isHidden = true}
完工!!