gpt4 book ai didi

ios - 组合两个 TableViewController

转载 作者:行者123 更新时间:2023-11-30 13:04:12 26 4
gpt4 key购买 nike

我有以下问题:

我有一个应用程序,它使用两个 tableViewController。第一个 TableViewController 列表

struct Task{
let type: String
[other attributes]
}

这些任务存储在 TaskStore 类中,并具有一个静态共享实例,该实例存储应用程序中的所有任务。

class TaskStore {
var tasks: [Task] = []

class var sharedInstance: TaskStore {
struct Static {
static let instance = TaskStore()
}
return Static.instance
}
}

现在,对于每个任务,我需要存储一组与该任务实例关联的子任务。因此,我创建了一个子任务结构

struct Subtask{
let subtype: String
[other attributes]
}

并创建了一个 SubtaskStore 类,我将其修改为不再包含静态实例,而是:

class SubtaskStore {
var subtasks: [Subtask] = []

class var sharedInstance: SubtaskStore {
let instance = SubtaskStore()
return instance
}
}

注意:在我看来,这比简单地将子任务数组作为任务结构的成员包含要有利得多,因为我可以创建操作 SubtaskStore.sharedinstance 的方法。

然后我将任务结构修改如下

struct Task{
let type: String
var subtasks: SubtaskStore // as oppose to: var subtasks [Subtask] = []
}

这个想法是,现在每个任务都有自己的 SubtaskStore,它存储手头任务的所有子任务。

第一个问题:是否有更好的方法对任务到子任务的层次结构进行建模?我对编程很陌生,但设计看起来很直观。

我已经成功创建了一个交互式 TableViewController,它显示 TaskStore 中的元素并在添加/删除新任务时更新表。我现在已经在 Task TableViewController 和 SubTask TableViewController 之间创建了一个链接;单击 TaskTableViewCell 将打开一个新的 SubTaskTableViewController(当前为空)。

第二个问题:假设用户选择的TaskTableViewCell位于第5行。我想在SubtaskTableViewController中显示“TaskStore[4].subtasks”中的元素。如何将数字“4”从 TaskTableViewController 中选定的 TaskTableViewCell 传递到 SubTaskTableViewController 并显示在 TaskStore[4].subtasks.sharedInstace 中的元素上?

最佳答案

我认为您的架构并不是一个特别好的设置。

需要注意的重要一点是,如果您想更改所有任务的某些属性,例如添加颜色属性,您需要在两个结构中实现它,然后更新两个单独的 View Controller 以进行着色。如果您想允许子任务拥有子任务会发生什么 - 我们是否必须不断创建 SubSubTask 类型的更深层次的结构?即使在我们进行任何更改之前 - 我相信您不会因为实现两个独立但几乎相同的 TableView Controller 而感到兴奋。

更好的方法是使用一个结构体,Task,它允许子任务数组。您的 TaskStore 将仅跟踪顶级任务,子任务由其父任务“拥有”。

struct Task {
var children = [Task]()
// other properties
}

class TaskStore {
var tasks = [Task]()

// Swift now supports static vars on classes
static var sharedInstance = TaskStore()
}

通过此设置,您还可以只编写一个 TableView Controller ,该 Controller 显示提供给它的任务列表(来自您选择的某些来源)。该任务列表可以是一个子列表,但它与 TableView Controller 无关 - 这很棒 - 因为它使您的代码更简单且更易于维护。

<小时/>

对于第二部分,如果您使用发送 View Controller 的prepare for segue 方法来使用 Storyboard,则可以将信息传递给其他 View Controller 。 SO 上有很多关于该主题的信息。

How do you share data between view controllers and other objects in Swift?

关于ios - 组合两个 TableViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575802/

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