函数内部结构数组的全局范围 - 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。那可能是个不错的选择。)
我想打乱我的数组问题,并在程序启动时使用打乱的数组。我创建了这个随机排列数组的函数。
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。那可能是个不错的选择。)