#13–1 問答題 App

規劃

  1. 一共有 15 個問題和答案,每一次隨機抽出 10 個問答
  2. 按下『看答案』顯示答案
  3. 按『下一題』顯示下一個題目,答案欄位出現問號
  4. 到第 10 題時出現『再一次』按鈕
  5. 點下『再一次』按鈕,按鈕消失出現『下一題』按鈕

產生一個新的類別

路徑: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 -再一次按鈕

  1. 重新抽出10個問題,所以問題和順序會和前一次不一樣
  2. 問題的次序必須從1開始,並且隱藏前一題的答案
  3. 隱藏『再一次』,顯示『下一題』
@IBAction func tryAgain(_ sender: Any) {questions.shuffle()index = 0numberLabel.text = String(index + 1)questionLabel.text = questions[index].descriptionanswerLabel.text = “ ? “nextButton.isHidden = falseagainButton.isHidden = true}}

完整的程式請見 GitHub

https://github.com/LetaLei/QnAApp

--

--