swift3學習:作業9:周星星問答

2017030919:07
題目
畫面上顯示2個label,一個問題label,一個答案label。 2個button,一個”下一題”button,一個”顯示答案” button。
全部10個問題,問題會循環。一開始答案label空白,點選”顯示答案”button後才會顯示答案。
進階題:
選擇題。每題有四個選項,答對一題加 10 分。題庫有20題,隨機出其中的十題,答完十題後算總分。

 

這次作業用到幾個新學到的技巧:
 

物件陣列

//題目資料
class Question {
    var question = "" //題目
    var opt1 = ""     //選項一
    var opt2 = ""     //選項二
    var opt3 = ""     //選項三
    var opt4 = ""     //選項四
    var ans  = 0      //正確答案
    
    init(question: String, opt1: String, opt2: String, opt3: String, opt4: String, ans: Int) {
        self.question = question
        self.opt1 = opt1
        self.opt2 = opt2
        self.opt3 = opt3
        self.opt4 = opt4
        self.ans = ans
    }
}


    //題庫
    var questionList:[Question] = [
        Question(question: "「小強」兩字首次出現在?",
                 opt1: "功夫",
                 opt2: "少林足球",
                 opt3: "食神",
                 opt4: "唐伯虎點秋香.",
                 ans: 4),
        Question(question: "「地球是很危險地,你快點回火星去吧」出自?",
                 opt1: "逃學威龍",
                 opt2: "少林足球.",
                 opt3: "食神",
                 opt4: "整人專家",
                 ans: 2),
        Question(question: "打敗整人之霸後,講的第一句話?",
                 opt1: "你到底是整人界的第一高手.",
                 opt2: "哈哈哈",
                 opt3: "恭喜 恭喜",
                 opt4: "你死定了",
                 ans: 1),

                 ::::
                 ::::
                 ::::
    ]


讀取這種陣列的方式 就跟一般 class 存取一樣,如:

questionList[n].question //題目
questionList[n].ans //答案

另外 讀陣列 n 的型態必須是 Int 不能其它數字型態

例如

var n:Int = 3
questionList[n].question //正確
var n:UInt32 = 3
questionList[n].question //錯誤
可以這樣
questionList[ Int(n) ].question //正確



按鈕 @IBACTION

這四個是 Button

每一個按鈕都要有一段相對應的程式碼

例如

@IBAction func pressButton1(_ sender: Any) {
  //按鈕一do something
}

@IBAction func pressButton2(_ sender: Any) {
  //按鈕二do something
}

一個按鈕就要來一段相同的程式碼,若是做個計算機有 10 幾個按鈕都做「類似的事」就要寫個 10幾段幾乎相同的code!! 那來設計個工程計算機呢?

能不能所有按鈕都連到同一段 action? (只用一個 function 解決?)

可以的,就這樣

@IBAction func pressAnswerButton(_ sender: Any) {
  //這兩行取得按鈕的 tag 編號 (這個 tag 請參考後面這張圖,tag必須是數字)
  let button = sender as! UIButton
  let index = button.tag
  //do something
}
輸入 Tag 必須是數字

以上.感謝 赤木gatesakagi 的指導
 

手勢操作

如上圖,答對後,下方顯示一張恭喜的圖片

我們希望按下這圖片後,自動跳到下一題

但 Image View 其實是不能「按」的

要再加上「Tap Gesture Recognizer 」就是手勢操作

手勢操作有好幾種(如下),不過還沒研究///

這裡用到的是「Tap Gesture Recognizer」

1.設定方式如下

2. 如下圖拉個線,再 key 上程式碼就 Ok

用戶按上面那張「超跑鋼圈」圖時,就會執行這段程式碼



完整程式碼 github:(有誤的地方請指教)

hellofire/homework9_1
Contribute to homework9_1 development by creating an account on GitHub.github.com


後記:

coding 2hrs,處理畫面、圖片 3hrs+

作業寫到第9集,還沒碰到惱人的驚嘆號、問號….

看過 OC 還有同一行出現了 7,8組 [] ,又有一堆加號、減號,這是@#$$%#%!!