从另一个类访问数组时,数组值是否不正确?

时间:2014-12-08 20:40:46

标签: ios arrays class swift reduce

所以我有一节课:

class FoodListTable: UITableViewController

我为这个类设置的一个属性是一个数组:

var calorieNumberArray = [0,0,0,0,0,0,0,0,0]

我有这个数组的原因是针对不同的值,如果选择了一行(使用tableView Checkmark辅助功能类型)。我做了一些测试,当选择了一行时,数组值正在正确变化。我还有一个变量,可以在calorieNumberArray中找到值的总和:

var calorieTotal: Float {
    return calorieNumberArray.reduce(0 as Float) { $0 + Float($1) }
}

我还有另一堂课:

class Menu: Calculator // Calculator class is of type UIViewController

我使用导航栏从FoodListTable班级转换为Menu班级。 在类menu的ViewDidLoad方法中,我尝试访问calorieNumberArraycalorieTotal的值:

override func viewDidLoad() {
        let foodListTableAccess = FoodListTable()
        println(foodListTableAccess.calorieNumberArray)
        println(foodListTableAccess.calorieTotal)

这就是控制台中显示的内容:

[0, 0, 0, 0, 0, 0, 0, 0, 0] // calorieNumberArray
0.0 // calorieTotal

如何从FoodListTable班级正确访问Menu班级,以便calorieNumberArraycalorieTotal的值保持不变,不会重置为原来的值?谢谢!

1 个答案:

答案 0 :(得分:1)

viewDidLoad类中的Menu函数正在实例化FoodListTable的新实例,并且该新实例中的变量将具有其初始值。您需要传递对现有实例的引用。您可以在prepareForSegue中的FoodListTable中执行此操作。

首先,在您的Menu课程中,添加FoodListTable?类型的新属性以接收参考,然后在FoodListTable中添加以下内容 -

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "yourSegueName" {   // Change to suit the name of the segue between the two 

        let menu = segue.destinationViewController as Menu
        menu.foodListTable=self;
    }
}

现在,在您的菜单实例中,您只需访问self.foodListTable。

从面向对象的设计中,最好创建一个数据模型对象并在FoodTableViewController中创建该对象的实例,然后传递此对象而不是视图控制器本身 - 这样你就会解耦来自“视图控制器”的“模型”