使用具有 Swift 的单个表视图在 2 个数据模型之间传输数据

Data transfer between 2 data models using a single tableview with Swift

我有两个数据模型。一种用于待办事项,一种用于已完成的项目。在这两种模型中,它只需要项目的内容和完成时的标志。以下是代码:
对于待办事项:

class TodoList: NSObject {
    var task: String
    var completed: Bool

    init(task: String) {
        self.task = task
        self.completed = false
    }
}

已完成的项目:

class CompletedList: NSObject {
    var task: String
    var completed: Bool

    init(task: String) {
        self.task = task
        self.completed = true
    }
}

我想要实现的是,当待办事项列表中的项目标记为已完成时,它将从待办事项模型中删除,并move/copy到已完成的项目模型中。我怎样才能让它工作?谢谢

PS:这两个数据模型将共享一个带有分段控制的 table 视图。

编辑: 也许我之前的陈述令人困惑。让我重新表述一下:
我设置了一个带分段控件的 UITableView。
分段控件有两个段,"To-do" & "Done".
选择"To-do" 时,table 视图将显示未完成的项目列表。选择 "Done" 后,table 视图将显示已完成的项目列表。
实现此目标的最佳做法是什么?

数据模型无关紧要。因为这些与您的观点无关。您必须设置将呈现给表格视图的数据。

these two data models will be sharing a single table view with segmented control.

您可以从 tableView 委托中设置它。喜欢:

override func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
    return 2
}

override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
    if section == 0
        return toDoTask.count
    else
        return completedTask.count

}

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

    //Check the section and return data if it is completed or incomplete
    return cell
}

几个反应:

  1. 您的 class 名称表明这些代表任务列表,但实现(即任务描述和完成状态)表明这些 classes 代表单个任务。我建议您澄清您的模型,可能对这两种类型的实体(单个任务与任务集合)有单独的 classes。

  2. 我建议一个 Task class。唯一的问题是如何捕获 todocomplete 状态:

    • 您可以仅将完成状态表示为 Task:

      的 属性
      class Task {
          var title: String
          var completed: Bool
      
          init(title: String, completed: Bool = false) {
              self.title = title
              self.completed = completed
          }
      }
      

      然后,您可以收集所有任务:

      var tasks = [Task]()
      

      然后,当您需要已完成任务的列表时,您可以:

      let completed = tasks.filter() { [=12=].completed }
      

      或者,同样,待办事项列表:

      let todo = tasks.filter { ![=13=].completed }
      

      如果您的列表很长,这种实现是不切实际的,但对于简单的问题列表,这是一种简单的方法。

    • 或者,您可以简化任务 class,移除 completed 状态:

      class Task {
          var title: String
      
          init(title: String) {
              self.title = title
          }
      }
      

      然后维护任务集合(数组或集合或任何对您的应用程序有意义的内容):

      var todo = [Task]()
      var completed = [Task]()
      

      然后,当您想要将某项从待办事项列表移至已完成列表时,只需将其从一个列表中删除并将其添加到另一个列表中即可。

      func completeTodoTaskAtIndex(index: Int) {
          if index < todo.count {
              let task = todo[index]
              todo.removeAtIndex(index)
              completed.append(task)
          }
      }
      

一旦为您的应用找出合适的模型,让表格视图正确显示结果就非常容易了。因此,首先确定模型,其余的将顺理成章地进行。