簡體   English   中英

如何結束開關盒

[英]How to end a switch case

我創建了一個帶有隨機問題的類,但是switch語句沒有結束,並且問題一直循環進行。 當所有4個問題隨機完成后,如何防止這種情況發生並顯示另一個頁面?

import UIKit

class ThirdViewController: UIViewController {


@IBOutlet weak var Question: UILabel!
@IBOutlet weak var Ans1: UIButton!
@IBOutlet weak var Ans2: UIButton!
@IBOutlet weak var Ans3: UIButton!
@IBOutlet weak var Ans4: UIButton!
@IBOutlet weak var Result: UILabel!
@IBOutlet weak var Next: UIButton!
var correctAns = String()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    Hide()
    Random()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func Random(){
    var RandomNumber = arc4random() % 4
    RandomNumber += 1

    switch (RandomNumber) {
    case 1:
        Question.text = "Where does minal lives?"
        Ans1.setTitle("dubai", for: UIControlState.normal)
        Ans2.setTitle("london", for: UIControlState.normal)
        Ans3.setTitle("india", for: UIControlState.normal)
        Ans4.setTitle("japan", for: UIControlState.normal)
        correctAns = "2"
        break
    case 2:
        Question.text = "What is my name?"
        Ans1.setTitle("Sunil", for: UIControlState.normal)
        Ans2.setTitle("Harish", for: UIControlState.normal)
        Ans3.setTitle("Rohit", for: UIControlState.normal)
        Ans4.setTitle("Minal", for: UIControlState.normal)
        correctAns = "4"
        break
    case 3:
        Question.text = "How old are you?"
        Ans1.setTitle("22", for: UIControlState.normal)
        Ans2.setTitle("32", for: UIControlState.normal)
        Ans3.setTitle("21", for: UIControlState.normal)
        Ans4.setTitle("28", for: UIControlState.normal)
        correctAns = "1"
        break
    case 4:
        Question.text = "What are you studying?"
        Ans1.setTitle("Computer Science", for: UIControlState.normal)
        Ans2.setTitle("Java", for: UIControlState.normal)
        Ans3.setTitle("Bio", for: UIControlState.normal)
        Ans4.setTitle("Business", for: UIControlState.normal)
        correctAns = "3"

        break

    default:
        Result.text = "Finished"
        break


    }

}

func Hide(){
    Result.isHidden = true
    Next.isHidden = true
}

func Unhide(){
    Result.isHidden = false
    Next.isHidden = false
}




@IBAction func Ans1Action(_ sender: Any) {
    Unhide()
    if (correctAns == "1"){
        Result.text = "Correct!"
    }
    else{
        Result.text = "Try Again"
    }
}


@IBAction func Ans2Action(_ sender: Any) {
    Unhide()
    if (correctAns == "2"){
        Result.text = "Correct!"
    }
    else{
        Result.text = "Try Again"
    }
}


@IBAction func Ans3Action(_ sender: Any) {
    Unhide()
    if (correctAns == "3"){
        Result.text = "Correct!"
    }
    else{
        Result.text = "Try Again"
    }
}


@IBAction func Ans4Action(_ sender: Any) {
    Unhide()
    if (correctAns == "4"){
        Result.text = "Correct!"
    }
    else{
        Result.text = "Try Again"
    }
}

@IBAction func NextAction(_ sender: Any) {
    Random()
    Hide()
}

}

您需要保留已經提出的問題數量。 switch (RandomNumber)將始終輸入case語句之一,因為RandomNumber始終在1...4范圍內。

因此,您需要做的是添加一個實例變量

private var questionCounter = 0

並修改NextAction函數,如下所示:

@IBAction func NextAction(_ sender: Any) {
    questionCounter += 1
    if questionCounter >= 4 {
        Result.text = "Finished"
        // or whatever...
    }
    else {
        Random()
        Hide()
    }
}

請記住,通過每次執行arc4random() ,同一問題可能會出現多次。

創建一個從1到4的Int索引數組。

從數組中提取一個元素並顯示該項目。 當數組為空時,停止:

像這樣:

var questionIndexes = [1, 2, 3, 4]

if questionIndexes.count > 0 {
  let random = Int(arc4random_uniform(Uint32(questionIndexes.count)))
  let index =  questionIndexes.remove(at: index)
  askQuestionAtIndex(index)
}

(您必須調整代碼以適合您現有的代碼,但這是基本思想。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM