我有两个数据模型。一个用于待办事项,一个用于已完成的物品。在这两个模型中,只需要项目的内容和标志(如果已完成)。以下是代码:
对于待办事项:
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:这两个数据模型将共享一个具有分段控制的表视图。
修改
也许我之前的陈述令人困惑。让我重新说一下:
我设置了一个带分段控制的UITableView
分段控制有两个部分,"待办事项" &安培; "完成&#34 ;.
当"待办事项"如果选中,表视图将显示未完成的项目列表。当"完成"如果选中,表格视图将显示已完成项目的列表
实现这一目标的最佳做法是什么?
答案 0 :(得分:1)
一些反应:
您的类名称表示这些代表任务列表,但实现(即任务描述和已完成状态)表明这些类代表各个任务。我建议你澄清一下你的模型,可能有两种类型的实体(个别任务和任务集合)的单独类。
我建议使用一个Task
课程。唯一的问题是如何捕获todo
vs complete
州:
您可以仅将完成状态表示为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)
}
}
一旦找到适合您的应用的模型,然后让tableview正确显示结果非常简单。因此,首先确定模型,其余的将遵循逻辑。
答案 1 :(得分:0)
数据模型无关紧要。因为这些与您的观点无关。您必须设置将呈现给tableview的数据。
这两个数据模型将共享一个表视图 分段控制。
您可以从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
}