gpt4 book ai didi

ios - 使用 Swift 的单个 TableView 在 2 个数据模型之间传输数据

转载 作者:行者123 更新时间:2023-11-29 01:43:30 26 4
gpt4 key购买 nike

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

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
}
}

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

PS:这两个数据模型将共享一个带有分段控件的 TableView 。

编辑:也许我之前的说法令人困惑。让我重新表述一下:
我设置了一个带分段控件的 UITableView。
分段控件有两个部分,“待办事项”和“完成”。
选择“待办事项”时,表格 View 将显示未完成的项目列表。当选择“完成”时,表格 View 将显示已完成的项目列表。
实现这一目标的最佳实践是什么?

最佳答案

一些 react :

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

  2. 我建议使用单个 Task 类。唯一的问题是如何捕获 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() { $0.completed }

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

      let todo = tasks.filter { !$0.completed }

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

    • 或者,您可以简化任务类,移除 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)
      }
      }

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

关于ios - 使用 Swift 的单个 TableView 在 2 个数据模型之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com