gpt4 book ai didi

ios - 如何将数据从父模型类传递到 SwiftUI 中的 subview

转载 作者:行者123 更新时间:2023-12-02 02:08:47 25 4
gpt4 key购买 nike

我的主视图位于 ContentView 类中,我在 ContentViewModel 类中进行网络调用,并使用响应更新类调用 User。

我的 ContentView 有几个 subview ,例如 HeaderView。当我从 API 响应更新 User 类属性时,我也想更新 HeaderView 中定义的 UI 元素。如何从 ContentViewModel 类将数据传递到我的 subview (HeaderView)?


我可以通过设置 ContentViewModel 类 ObservableObject 来更新 ContentView 元素,这非常简单

class ContentViewModel: ObservableObject {

并发布了 User 对象

@Published var user = User()

并在同一 ContentViewModel 中收到 API 响应后更新用户的属性

self.user.name = name

我的 ContentView 与其模型类的关系如下所示

@StateObject private var contentViewModel = ContentViewModel()

UI 更新如下

Text("My name \(contentViewModel.user.name)")

这就是ContentView的工作场景。但我需要将值传递给 HeaderView()。我的用户类别如下

import Foundation

class User {
var name = ""
// more attributes
}

最佳答案

这是我经常使用的模式:(注意没有私有(private)变量)

struct ContentView: View {
@StateObject var contentViewModel = ContentViewModel()
...
var body: some View {
...
HeaderView(contentViewModel: contentViewModel)
}
}

struct HeaderView: View {
@ObservedObject var contentViewModel: ContentViewModel

var body: some View {
...
Text("My name \(contentViewModel.user.name)")
}
}

struct User {
var name = ""
// more attributes
}

您可以使用与“.environment(...)”模式相同的想法将 ContentViewModel 传递给所有 subview 。

编辑:按照@Asperi的建议,用户应该成为一个结构。

关于ios - 如何将数据从父模型类传递到 SwiftUI 中的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68011805/

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