【问题标题】:Global scope for array of structs inside function - Swift函数内部结构数组的全局范围 - Swift
【发布时间】:2015-06-17 13:30:26
【问题描述】:

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

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

这给了我一个包含问题的数组,该数组继承了下面结构中的值。我遇到的问题是它是 shuffleQuestions 函数本地的。如何创建一个空的 structs 变量数组,我可以在全局范围内声明它以将打乱的问题放入其中。我需要创建一个新课程吗?

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

【问题讨论】:

  • "但这似乎不起作用。" 是什么意思? var shuffledQuestions = shuffle(questions) 确实 创建了一个包含随机问题的数组。但是该数组是函数的本地数组,因此不能在其他地方使用。这是你的问题吗?
  • 我已经更新了我的问题以更好地反映我的问题,但是是的,这似乎是我面临的问题!

标签: arrays function swift struct shuffle


【解决方案1】:

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

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

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

该函数不返回结果。它声明了一个局部变量shuffledQuestions。它对questions 数组的内容进行洗牌,并将结果存储到局部变量shuffledQuestions 中。然后函数返回。

函数返回时局部变量shuffledQuestions会发生什么?在找到该问题的答案之前,您需要考虑这一点。

编辑:通过更新,您的问题更加清晰。

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

你有几个选择。你可以重写你的函数来返回排序后的数组:

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

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

看起来您正在将可变问题声明为应用程序全局。最好避免使用全局变量。

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

【讨论】:

  • 您好邓肯,感谢您的回复。我已经更新了我的问题,希望能更好地反映我的问题。对于问题的措辞不佳表示歉意,我对 Swift 和编程非常陌生(3 周前才开始),有时我很难表达自己,因为这些术语在我的脑海中并没有完全理解。感谢您的帮助。
  • 感谢您的帮助和建议。我一定会看看那本书。
猜你喜欢
  • 2013-07-13
  • 2017-01-20
  • 1970-01-01
  • 2012-02-18
  • 2018-01-16
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 2012-09-08
相关资源
最近更新 更多