2016-11-29 43 views
0

我在斯威夫特2取得了问答游戏,去年,现在我需要当我把它转化为斯威夫特3答案现在随机再次使用它......这里有一个简单的问题...结构为什么我的答案在我的问答游戏中随机化?

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

这是我随机化问题,并把它们放到标签

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

我不得不手动更改以下行这可能引起了从一个问题...

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

QNumber = random() % Questions.count 

感谢

+2

你应该坚持Swift编程标准/命名约定。变量不应该大写,应该是骆驼大小写。对我们来说,你所有的变量看起来像类,可能会让我们感到困惑,因为那时我们认为这些类可能以某种方式操纵数据,而我们不知道。如果它不是类,枚举,类型,协议或结构,请不要使它们大写。 –

回答

-1

阵列是无序的集合,这意味着他们的订单可能会更改,恕不你知道。你最好的选择将是创建一个包含持有这两个问题和答案,像这样一个结构单一的阵列:

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

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

更改声明,如下所示: let items = [QuizItem(...)]

你这样的代码:

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

而且,那种挑剔,但值得强调的依然。 Swift是一个骆驼案例语言,虽然这个规则没有成立,你应该尝试并坚持广泛认可的编码实践。

+2

你确定你的第一句话吗?还是你的意思是当作为参数传递?或者在什么情况下阵列会随机洗牌?我从来没有一个数组没有被命令如何我想要它,我已经使用Swift自从它出来。 –

相关问题