2016-11-15 1 views
3

내가 arc4random에 임의의 구문을 업데이트하기 위해 노력하고있어 스위프트 2 퀴즈 응용 프로그램을 만든 ...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

내가 당신의 질문을 이해 모르겠어요 값을 변환해야합니다 있도록 UInt32 매개 변수를 기대하고있다. (또한 modulo가 필요 없습니다; 대신에 arc4random_uniform을 매개 변수와 함께 사용해야합니다 (modulo bias를 피하십시오) (http://stackoverflow.com/questions/3420581/how-to-select-range -of-values-using-arc4random)) –

+2

변수 이름이 소문자로 시작하는 명명 규칙을 따르는 것을 고려하십시오. 코드를 읽는 것은 매우 어렵습니다. – vadian

답변

4

대신 간단한 arc4randomarc4random_uniform을 사용하는 것이 좋습니다.

arc4random_uniform는 앞뒤로

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])