通过不同的视图控制器Swift的数组数据

时间:2017-07-29 01:20:58

标签: ios arrays swift uiviewcontroller

嘿伙计们,我正在制作我的第一个应用程序并需要一些帮助。我的锻炼跟踪器应用程序有两个类,您可以在下面找到。我有两个视图控制器连接到他们自己的swift文件。

Heres my first view controller

基本上它的作用是将文本字段和步进器中的数据转换为"锻炼"然后将对象附加到" WorkoutList" class array。

我有一个打印语句设置,可以打印Array.count。它在调试中显示正确的数字,但是当我切换视图时,它会重置为零。

  @IBAction func addToWorkoutList(_ sender: UIButton) {

        let workout = Workout(name: workoutName.text!, description: workoutDescription.text!, sets: Int(setStepper.text!)!, reps: Int(repStepper.text!)!)
        workoutArrayList.append(workout)

        print(workoutArrayList.count)
    }

第二个视图继承了第一个视图类,这就是我如何访问" WorkoutArrayList"

class OverViewViewController: NewWorkoutViewController, UITableViewDelegate, UITableViewDataSource {

我的应用程序基本上允许您添加锻炼,然后根据您提供的数据生成图表。这可以让您轻松想象您在健身房的收益。我这样做是一个学习项目,所以对构建这个应用程序我应该做的任何帮助也将非常感激。

锻炼对象类

import Foundation

class Workout {

    let workoutName : String
    let workoutDescription : String
    let numberOfSets : Int
    let numberOfReps : Int

    init(name : String, description : String, sets : Int, reps : Int) {
        workoutName = name
        workoutDescription = description
        numberOfSets = sets
        numberOfReps = reps
    }
}

WorkoutList类

import Foundation

class WorkoutList {

    let workoutArray : [Workout] = []

}

1 个答案:

答案 0 :(得分:0)

继承这个类不是你想要做的。一个简单的解决方法是让workoutArray成为一个静态变量,这样任何类都可以在任何给定的时间访问它。

static var workoutArray : [Workout] = []

这就是为什么继承该类不起作用的原因。当OverViewViewController加载到应用程序时,它会创建类OverViewViewController的新实例,并且由于它继承了NewWorkoutViewController,它还会创建NewWorkoutViewController类的新实例。您有两个不同的NewWorkoutViewController实例,更改其中一个实例中的变量不会更改该类的任何其他实例。但是,您正在寻找静态变量。可以从任何类中随时更改和访问该数组,您甚至不需要继承。无论您是workoutArray静态还是workoutArrayList静态,都可以使用。

如果您有任何其他问题,请随时发表评论。