2016-11-29 3 views
0

ich ein Quiz-Spiel in Swift 2 im letzten Jahr gemacht, jetzt muss ich es wieder verwenden, wenn ich es zu Swift 3 Antworten jetzt randomisieren umgewandelt ... Hier ist eine Probe Fragestruktur ...Warum werden meine Antworten zufällig in meinem Quizspiel verwendet?

Questions = [Question(Question: "What is the Biggest Hit of Bing Crosby?" , Answers: ["Swinging on a Star", "Now is the Hour", "White Christmas", "Beautiful Dreamer"], Answer: 2),] 

Dies ist, wo ich die Fragen Randomisierung und in die Etiketten aufgeführt

func PickQuestions() { 

    counter += 1 
    score += 1 
    scoreLbl.text = "\(score)" 

    restartBtn.isEnabled = false 
    if Questions.count > 0 && counter <= 15 { 
     QNumber = Int(arc4random_uniform(UInt32(Questions.count))) 
     QLabel.text = Questions[QNumber].Question 

     AnswerNumber = Questions[QNumber].Answer 

     for i in 0..<Buttons.count{ 
      Buttons[i].setTitle(Questions[QNumber].Answers[i], for: UIControlState()) 
     } 

     Questions.remove(at: QNumber) 
    } 
} 

ich die folgende Zeile ändern musste manuell, die von einem Problem verursacht haben könnte ...

QNumber = Int(arc4random_uniform(UInt32(Questions.count))) 

zu

QNumber = random() % Questions.count 

Dank

+2

Sie sollten sich an Swift Programmierstandards/Namenskonventionen halten. Variablen sollten nicht großgeschrieben werden und sollten in camel case sein. Für uns sehen alle Ihre Variablen wie Klassen aus und könnten uns verwirren, denn dann glauben wir, dass diese Klassen die Daten irgendwie manipulieren und wir würden es nicht wissen. Wenn es keine Klasse, Enum, Typalias, Protokoll oder Struktur ist, kapitalisieren sie nicht. –

Antwort

-1

Arrays sind ungeordnete Sammlungen, was bedeutet, dass ihre Bestellung möglicherweise ohne Ihr Wissen ändern könnte. Ihre beste Wette wäre ein einzelnes Array zu erstellen, eine Struktur enthält, die sowohl die Frage und Antwort hält, etwa so:

struct QuizItem { 
    var question: String! 
    var answer: String! 
    var answerOptions: [String]! 

    init(q: String, a: String, aOptions:[String]) { 
     self.question = q 
     self.answer = a 
    } 
} 

Ändern Sie Ihre Erklärung wie folgt aussehen: let items = [QuizItem(...)]

Ihr Code wie folgt :

func PickQuestions() { 

    counter += 1 
    score += 1 
    scoreLbl.text = "\(score)" 

    restartBtn.isEnabled = false 
    if items.count > 0 && counter <= 15 { 
     QNumber = Int(arc4random_uniform(UInt32(Questions.count))) 
     let item = items[QNumber] 
     QLabel.text = item.question 

     for i in 0..<Buttons.count{ 
      Buttons[i].setTitle(item.answerOptions[i], for: UIControlState()) 
     } 

     items.remove(at: QNumber) 
    } 
} 

Auch, irgendwie wählerisch, aber es lohnt sich, noch hervorzuheben. Swift ist eine camel case Sprache und obwohl diese Regel nicht in Stein gemeißelt ist, sollten Sie versuchen, und bleiben Sie bei den weithin anerkannten Programmierpraktiken.

+2

Sind Sie sich über Ihren ersten Satz sicher? Oder meinst du, wenn als Parameter übergeben? Oder unter welchen Umständen wird das Array zufällig gemischt? Ich hatte noch nie ein Array bestellt, wie ich es wollte, und ich habe Swift benutzt, seit es herauskam. –

Verwandte Themen