2016-11-15 4 views
3

Ich habe einen Quiz-App in Swift 2 Ich versuche, die Syntax von zufällig arc4random zu aktualisieren ...arc4random Swift 3 Syntax

if Questions.count > 0 && counter <= 15 { 
      QNumber = arc4random()% 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) 
    } 
+2

Ich bin nicht sicher, ob ich verstehe Ihre Frage zu konvertieren. (Es gibt auch keine Notwendigkeit für den Modulo; Sie sollten stattdessen 'arc4random_uniform' mit einem Parameter verwenden, da dies [modulo bias] vermeidet (http://stackoverflow.com/questions/3420581/how-to-select-range) -of-values-when-using-arc4random)) –

+2

Bitte beachten Sie die Namenskonvention, dass Variablennamen mit einem Kleinbuchstaben beginnen. Ihr Code ist sehr schwer zu lesen. – vadian

Antwort

4

Es wird empfohlen, arc4random_uniform statt einfacher arc4random zu verwenden.

arc4random_uniform erwartet einen UInt32 Parameter, so dass Sie die Werte hin und her

qNumber = Int(arc4random_uniform(UInt32(questions.count))) 
+0

Wird die obere Grenze in die möglichen Ergebnisse einbezogen? Wenn zum Beispiel questions.count 100 wären, würde arc4random_uniform eine Zufallszahl zwischen 0 und einschließlich 99 oder einschließlich 1-100 generieren? – zeeple

+0

Aus der Dokumentation: * Die Funktion arc4random() gibt Pseudozufallszahlen im Bereich von 0 bis (2 ** 32) -1 * zurück. Wenn Sie also 1-100 benötigen, übergeben Sie 99 und fügen Sie 1 hinzu. – vadian

2

Hier ist ein Beispiel unter Verwendung von arc4random_uniform(). Diese Funktion möchte mit UInt32 s kommunizieren, was ein Casting zwischen den Typen erfordert.

let questions = ["What is love?", "What's the capital of Mongolia?"] 
let index = Int(arc4random_uniform(UInt32(questions.count))) 
print(questions[index])