#13–1 問答題 App
Published in
5 min readSep 1, 2020
規劃
- 一共有 15 個問題和答案,每一次隨機抽出 10 個問答
- 按下『看答案』顯示答案
- 按『下一題』顯示下一個題目,答案欄位出現問號
- 到第 10 題時出現『再一次』按鈕
- 點下『再一次』按鈕,按鈕消失出現『下一題』按鈕
產生一個新的類別
路徑:File / New / File ,選擇 Swift File ,接著在 Save AS 欄位填入自創的 Class 名稱 Question。
定義兩個 Class 要使用的變數,因為之後才會帶值進去先讓它是空的字串。
class Question{var description = “”var answer = “”}
回到 ViewController 設定 @IBOutlet
//顯示問題的Label
@IBOutlet weak var questionLabel: UILabel!//顯示答案的Label
@IBOutlet weak var answerLabel: UILabel!//顯示現在是第幾個問題的Label
@IBOutlet weak var numberLabel: UILabel!//因為要設定隱藏和顯示所以需要命名的下一題的按鈕
@IBOutlet weak var nextButton: UIButton!//因為要設定隱藏和顯示所以需要命名的再一次的按鈕
@IBOutlet weak var againButton: UIButton!//用來儲存所有問答題的array
var questions = [Question]()//用來存取次數及存取array的數值
var index = 0
Function1 -設定初始畫面/資料的 ViewDidLoad
override func viewDidLoad() {super.viewDidLoad()//設定最一剛開始出現問題的編號是1(index的起始值是0所以必須+1才能使用)
numberLabel.text = String(index + 1)//設定第一個問答並加入questions的array裡
let question1 = Question()question1.description = “佩佩的弟弟叫喬治,那她爸爸叫什麼?”question1.answer = “豬爸爸”questions.append(question1)……//省略之後的14個問答//打亂array中的順序
questions.shuffle()//一開啟APP必須先顯示第一個問題
questionLabel.text = questions[index].description}
Function2 -顯示答案的按鈕
@IBAction func showAnswer(_ sender: Any) {//在answerLabel顯示第一題的答案
answerLabel.text = questions[index].answer}
Function3 -下一題的按鈕
因為總共只會出現 10 個問答所以 index 不能大於 9。
( array 的起始值是0,所以 index = 9 是第 10 個問題)
我希望在最後一個問題時,隱藏『下一題』按鈕並且出現『再一次』,如果用 if else 的寫法,在 10 題時會出現『下一題』按鈕,必須多按一次才會出現『再一次』。所以我在 if index < 9 的程式裡再寫了一個 if index == 9來解決這個問題。
@IBAction func nextQuestion(_ sender: Any) {if index < 9 {index = index + 1numberLabel.text = String(index + 1)answerLabel.text = “ ? “questionLabel.text = questions[index].descriptionif index == 9 {//隱藏『下一題』按鈕
nextButton.isHidden = true//顯示『再一次』按鈕
againButton.isHidden = false}}}
Function4 -再一次按鈕
- 重新抽出10個問題,所以問題和順序會和前一次不一樣
- 問題的次序必須從1開始,並且隱藏前一題的答案
- 隱藏『再一次』,顯示『下一題』
@IBAction func tryAgain(_ sender: Any) {questions.shuffle()index = 0numberLabel.text = String(index + 1)questionLabel.text = questions[index].descriptionanswerLabel.text = “ ? “nextButton.isHidden = falseagainButton.isHidden = true}}