2016-11-15 36 views
3

我在斯威夫特2做了一个测验的应用程序,我试图从随机语法更新到arc4random ...arc4random斯威夫特3语法

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

我不知道我理解你的问题。 (另外,没有必要使用模;你应该使用'arc4random_uniform'来代替使用参数,因为这会避免模偏倚(http://stackoverflow.com/questions/3420581/how-to-select-range -of-values-when-using-arc4random)) –

+2

请考虑符合变量名以小写字母开头的命名约定。你的代码很难阅读。 – vadian

回答

4

我们推荐使用arc4random_uniform,而不是简单的arc4random

arc4random_uniform期待一个UInt32参数,所以你必须将这些值转换来回

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

上限是否包含在可能的结果中?例如,如果questions.count是100,那么arc4random_uniform是否会生成一个介于0到99之间的随机数,或者是1-100? – zeeple

+0

从文档:* arc4random()函数返回0到(2 ** 32)-1 *范围内的伪随机数,所以如果您需要1-100传递99并添加1。 – vadian

2

下面是一个使用arc4random_uniform()一个例子。该函数想要与UInt32进行通信,这需要在类型之间进行一些转换。

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