所以我有一节课:
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方法中,我尝试访问calorieNumberArray
和calorieTotal
的值:
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
班级,以便calorieNumberArray
和calorieTotal
的值保持不变,不会重置为原来的值?谢谢!
答案 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
中创建该对象的实例,然后传递此对象而不是视图控制器本身 - 这样你就会解耦来自“视图控制器”的“模型”