使用具有 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
}
几个反应:
您的 class 名称表明这些代表任务列表,但实现(即任务描述和完成状态)表明这些 classes 代表单个任务。我建议您澄清您的模型,可能对这两种类型的实体(单个任务与任务集合)有单独的 classes。
我建议一个 Task
class。唯一的问题是如何捕获 todo
与 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() { [=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)
}
}
一旦为您的应用找出合适的模型,让表格视图正确显示结果就非常容易了。因此,首先确定模型,其余的将顺理成章地进行。
我有两个数据模型。一种用于待办事项,一种用于已完成的项目。在这两种模型中,它只需要项目的内容和完成时的标志。以下是代码:
对于待办事项:
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
}
几个反应:
您的 class 名称表明这些代表任务列表,但实现(即任务描述和完成状态)表明这些 classes 代表单个任务。我建议您澄清您的模型,可能对这两种类型的实体(单个任务与任务集合)有单独的 classes。
我建议一个
Task
class。唯一的问题是如何捕获todo
与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() { [=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) } }
一旦为您的应用找出合适的模型,让表格视图正确显示结果就非常容易了。因此,首先确定模型,其余的将顺理成章地进行。