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

时间:2015-06-17 13:30:27

标签: arrays function swift struct shuffle

我想将我的数组问题改组,并在程序启动时使用洗牌数组。我已经创建了这个对数组进行混洗的函数。

private void packageTable() {
    Vector tableHeadings = new Vector();
    tableHeadings.add("PACKAGE NAMES");
    tableHeadings.add("SHOW");
    Table1.setModel(new Model(fileVector, tableHeadings));
}

class Model extends DefaultTableModel {
    Vector heading = null;
    Model(Vector data, Vector heading) {
        super(data, heading);
        this.heading = heading;
    }

    public Class getColumnClass(int cols) {
        if (getValueAt(0, cols) != null && cols > 0) {
            return getValueAt(0, cols).getClass();
        } else {
            return String.class;
        }
    }
}

这给了我一个包含问题的数组,它继承了下面结构中的值。我遇到的问题是它是shuffleQuestions函数的本地函数。如何创建一个空数组的结构变量,我可以全局声明这个结构变量。我需要创建一个新类吗?

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

我的结构数组

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
}

1 个答案:

答案 0 :(得分:1)

&#34; ......似乎不起作用......&#34;在寻求帮助时,你可以说是最不乐于助人的事情。你是什​​么意思&#34;似乎没有工作&#34;?!?!?它怎么样?说明它做了什么并不能满足你的需求。它崩溃了吗? shuffledQuestions数组是否没有洗牌?

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

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

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

函数返回时局部变量shuffledQuestions会发生什么?在你想出这个问题的答案之前,你需要考虑这个问题。

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

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

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

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

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

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

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