Swift 通过@Published变量更改选项卡视图(选择:)

Swift 通过@Published变量更改选项卡视图(选择:),swift,swiftui,Swift,Swiftui,我有一个带有标记项的选项卡视图 struct ContentView: View { @ObservedObject var tabController = TabController() var body: some View { TabView(selection: $tabController.selectedTab) { HomeView() .tabItem{ Image(systemName: "ho

我有一个带有标记项的选项卡视图

struct ContentView: View {
@ObservedObject var tabController = TabController()

var body: some View {
    TabView(selection: $tabController.selectedTab) {

        HomeView()
            .tabItem{
                Image(systemName: "house.fill")
                    .font(.system(size: 20))

                Text("Home")
        }.tag(0)

        ...
}
我有一个
observateObject
,它有一个
@Published selectedTab
变量和一个更改它的函数

调用该函数时,它会正确打印要切换到的选项卡的索引,但该选项卡不会切换。有人知道为什么吗

class TabController: ObservableObject {
    @Published var selectedTab = 3

    func changeTab(tabIndex: Int) {
        self.selectedTab = tabIndex
        print(selectedTab)
    }
}
除了
changeTab(tabIndex:)
之外,我还尝试直接更改
selectedTab

编辑:我调用changeTab(tabIndex:)如下:

struct DetailsView: View {
    @ObservedObject var tabController = TabController()

    var body: some View {
        ScrollView {
            VStack(alignment: .leading, spacing: 0) {

                  Button(action: {self.tabController.changeTab(tabIndex: 2)}) {
                      HStack {
                          Image(systemName: "bubble.left.fill")
                              .buttonIconModifier()
                          Text("Switch Tab")
                      }
                  }.modifier(ButtonStyle())
             }
         }        
    }
}
这是一个错误

struct ContentView: View {
@ObservedObject var tabController = TabController() // << 1st controller
struct ContentView:View{

@ObservedObject var tabController=tabController()//就我所能复制的代码而言,在这里一切都很好。使用Xcode 11.4/iOS 13.4进行测试。奇怪。上面我唯一没有指定的是如何调用changeTab-如下所示:
@ObservedObject var tabController=tabController()按钮(操作:{self.tabController.changeTab(tabIndex:2)}{HStack{Image(系统名:“bubble.left.fill”).buttonicomodifier()文本(“按钮文本”)}
如果你的按钮在主体中,那么我也会这样做。你能从调用函数的位置/方式显示另一个视图的代码吗?以及它与发布的
ContentView
的关系吗?我在上面添加了它,谢谢!@AsperiSo当按钮在ContentView中(你的TestSwitchTabOnPublished)时,这对我也有效但是我从另一个角度调用这个函数,它不起作用。谢谢,我们似乎缩小了范围。谢谢,这就是解决方案!
struct DetailsView: View {
    @ObservedObject var tabController = TabController() // << 2nd controller