SwiftUI无法使用列表和选项卡视图正确处理@State

SwiftUI无法使用列表和选项卡视图正确处理@State,swift,macos,swiftui,swiftui-list,Swift,Macos,Swiftui,Swiftui List,我有一个包含列表和一些其他视图的选项卡视图。当用户选择列表中的某个项目,然后更改选定的选项卡栏时,选项卡栏的选定状态不会更新,如果用户再次更改选定的选项卡栏,SwiftUI将同时呈现这两个内容 这里有一段视频可以更好地解释发生了什么: 下面是完整的代码: import SwiftUI struct ListView: View { @State var items = ["a", "b", "c"] @State var selectedItem: String?

我有一个包含列表和一些其他视图的选项卡视图。当用户选择列表中的某个项目,然后更改选定的选项卡栏时,选项卡栏的选定状态不会更新,如果用户再次更改选定的选项卡栏,SwiftUI将同时呈现这两个内容

这里有一段视频可以更好地解释发生了什么:

下面是完整的代码:

import SwiftUI

struct ListView: View {
    @State var items = ["a", "b", "c"]
    @State var selectedItem: String?

    var body: some View {
        List(selection: $selectedItem) {
            ForEach(items, id: \.self) { item in
                Text(item)
            }
        }
    }
}

struct ContentView: View {
    @State var selectedView = 1

       var body: some View {
           VStack {
               TabView(selection: $selectedView) {
                   ListView()
                       .padding().tabItem {
                           Text("1")
                   }.tag(1)

                   Text("2")
                       .padding().tabItem {
                           Text("2")
                   }.tag(2)

                Text("3")
                       .padding().tabItem {
                           Text("3")
                   }.tag(3)

               }.padding()
           }
       }
}

为什么SwiftUI不尊重TabView的@State?这仅在用户选择列表中的项目后发生,如果没有选择任何项目,则一切正常。

您需要将ListView的
@State var selectedItem:String?
更改为
@Binding var selectedItem:String
。然后在TabView中,
ListView(selectedItem:$selectedView)

它不是一种状态——它是列表激活,而且肯定是一个SwiftUI错误,因此值得向苹果提交反馈。