在Swiftui中,如何最小化向子视图传递函数

在Swiftui中,如何最小化向子视图传递函数,swiftui,Swiftui,我正在开发一个todo应用程序,它与API交互以存储数据。我的视图结构如下(简化): ContentView有一个webServer变量,该变量提供类似于storeTask(task:task)和deleteTask(task:task)的函数 因此,现在我希望我的TaskView能够修改任务。最简单的模式似乎是将storeTask和deletetettask提供给TaskView,以使视图不知道实现细节。这意味着我必须通过整个子视图树传递这两个函数:ContentView->ProjectVi

我正在开发一个todo应用程序,它与API交互以存储数据。我的视图结构如下(简化):

ContentView
有一个
webServer
变量,该变量提供类似于
storeTask(task:task)
deleteTask(task:task)
的函数

因此,现在我希望我的
TaskView
能够修改任务。最简单的模式似乎是将
storeTask
deletetettask
提供给
TaskView
,以使视图不知道实现细节。这意味着我必须通过整个子视图树传递这两个函数:
ContentView->ProjectView->TaskView
。但是,函数签名中的一个微小更改需要对作为视图层次结构一部分的每个视图进行更改


这感觉像是一个低效的模式,因为对于我正在构建的简单应用程序来说,它已经很复杂了。还有什么其他方法?在上下文中,我记得在处理React时遇到过同样的问题,并使用Redux之类的方法来处理这个问题。我想知道在SwiftUI中是否有一种标准的方法来简化这一点?

SwiftUI中最常见的架构模式是MVVM(Model-View-ViewModel)。网上有很多文章对此进行了解释,但基本上各层分为:

  • 模型-管理一段数据
  • 查看-管理用户界面
  • ViewModel—管理要在UI(视图)中显示的数据(模型)
  • 要回答您的问题,您需要创建管理数据的ViewModel层,并在视图中传递该ViewModel(如注释中提到的@Asperi)

    下面是一篇解释MVVM的精彩文章:


    下面是我的一个Github repo,它在SwiftUI中使用MVVM架构来制作一个todo list应用程序,类似于您的项目。如果查看ViewModel图层,您将发现您正在尝试执行的操作的示例

    将函数提取到视图模型类中,并以任何适当的方式通过视图层次结构传递视图模型的实例。查看ItemArrayObject以供参考。您可能不需要额外的DataManager层。()仍在进行中。谢谢@nicksarno查看。是的,如果你提出这个问题,我也很乐意给出答案,但不管是哪种情况,我都会看看回购协议,以便更好地理解这一模式。
    ContentView: List of { ProjectView }
    ProjectView: List of { TaskView }