使用@Binding在视图间传值引发无限循环问题求助
SwiftUI视图间传递State Object导致应用冻结问题
问题概述
在视图间传递State Object时出现嵌套视图问题,进入层级最深的视图后应用冻结,内存持续增长。
使用场景
合作伙伴列表 → 合作伙伴详情 → 位置列表 → 位置详情
原代码实现
视图模型
class PartnerViewModel: ObservableObject { @Published var partners: [Partner] = Partner.partners }
该视图被加载到父类的TabView和NavigationStack组件中。
合作伙伴列表视图
struct PartnerListView: View { @StateObject var viewModel = PartnerViewModel() var body: some View { List($viewModel.partners, id: \.self) { $partner in NavigationLink { PartnerDetailView(partner: $partner) } label: { Text(partner.name) } } } }
合作伙伴详情视图
struct PartnerDetailView: View { @Binding var partner: Partner var body: some View { Form { Section("Locations") { List($partner.locations, id: \.self) { $location in NavigationLink { LocationDetailView(location: $location) } label: { Text(location.name) } } } } } }
位置详情视图
struct LocationDetailView: View { @Binding var location: Location var body: some View { TextField("Name", text: $location.name) } }
临时可行解决方案
修改后的合作伙伴详情视图
struct PartnerDetailView: View { @Binding var partner: Partner var body: some View { Form { Section("Locations") { List($partner.locations, id: \.self) { $location in NavigationLink { LocationDetailView(partner: $partner, locationIndex: partner.locations.firstIndex(of: location) ?? 0) } label: { Text(location.name) } } } } } }
修改后的位置详情视图
struct LocationDetailView: View { @Binding var partner: Partner var locationIndex: Int var body: some View { TextField("Name", text: $partner.locations[locationIndex].name) } }
疑问
是不是我在视图间传值的方式有误?🤔

内容的提问来源于stack exchange,提问作者vargab
相关产品推荐
相关产品推荐

