2016-11-15 76 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])