函数内部结构数组的全局范围 - Swift

Global scope for array of structs inside function - Swift

我想打乱我的数组问题,并在程序启动时使用打乱的数组。我创建了这个随机排列数组的函数。

func shuffleQuestions() {
    var shuffledQuestions = shuffle(questions)
}

这给了我一个数组,其中包含从下面的结构继承值的随机排列的问题。我遇到的问题是它是 shuffleQuestions 函数的本地问题。如何创建一个空的结构变量数组,我可以全局声明它以将打乱的问题放入其中。我需要创建一个新的 class 吗?

func shuffle<C: MutableCollectionType where C.Index == Int>(var list: C) -> C {
    let c = count(list)
    for i in 0..<(c - 1) {
        let j = Int(arc4random_uniform(UInt32(c - i))) + i
        swap(&list[i], &list[j])
    }
    return list
}

我的结构数组

class QuizQuestion {

    let question: String!
    let answer: Bool!
    let explanation: String!
    var usersAnswer: Bool?
    var answerSubmitted: Bool?

    init(question: String, answer: Bool, explanation: String) {
        self.question = question
        self.answer = answer
        self.explanation = explanation
    }
}

    var questions = [

    QuizQuestion(question: "Do I like coffee?", answer: true, explanation: "Because it's awesome!"),
    QuizQuestion(question: "Is bacon god's gift to mankind?", answer: true, explanation: "Because it's awesome!"),
    QuizQuestion(question: "Should I take a nap right now?", answer: true, explanation: "You gotta review some code!"),
    QuizQuestion(question: "Should I take a nap right now?", answer: true, explanation: "You gotta review some code!")
]

“...这似乎行不通...”是您在寻求帮助时可以说的最无用的话的变体。你是什​​么意思它“似乎不起作用”?!?!?它怎么不起作用?解释它在做什么不符合您的需求。它崩溃了吗? shuffledQuestions 数组不是随机播放的吗?

你写了一个完全没用的函数shuffleQuestions。看看你写的:

func shuffleQuestions() 
{
    var shuffledQuestions = shuffle(questions)
}

该函数没有 return 结果。它声明了一个局部变量,shuffledQuestions。它打乱 questions 数组的内容并将结果存储到局部变量 shuffledQuestions 中。然后函数 returns.

当函数returns时,局部变量shuffledQuestions发生了什么?在找到该问题的答案之前,您需要考虑一下。

编辑:更新后你的问题更清楚了。

您编写了一个没有任何用处的函数,因为它创建了一个排序数组作为局部变量。一旦函数 returns,该变量就被丢弃。

你有几个选择。您可以将函数重写为 return 排序数组:

func shuffleQuestions()  -> [QuizQuestion]
{
    return shuffledQuestions = shuffle(questions)
}

或者您可以让您的 shuffleQuestions 函数对声明它的 class 的实例变量进行操作。

您似乎将可变问题声明为全局应用程序。最好避免使用全局变量。

就像我说的,听起来你并不真正理解变量作用域和参数传递的概念。你应该回去阅读一些基本的编程概念(我知道现在有一本 Big Nerd Ranch 的书教 Swift。那可能是个不错的选择。)