You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI TabView切换标签时触发函数,onChange报错如何解决?

错误原因

你给onChange(of:)传入的$currentTab是Binding<Int>类型,onChange要求监听的参数必须遵守Equatable协议,你实际需要监听的是currentTab的存储值,而非它的绑定包装对象,所以才会触发类型不匹配的报错。

修正方案

把onChange参数里的$符号删除即可,修正后的代码如下:

.onChange(of: currentTab, perform: { newValue in
    print(newValue)
})

完整使用示例(配合TabView)

struct TabDemoView: View {
    @State var currentTab = 0
    var body: some View {
        // TabView的selection参数需要绑定,所以这里保留$
        TabView(selection: $currentTab) {
            Text("首页")
                .tabItem { Label("首页", systemImage: "house") }
                .tag(0)
            Text("我的")
                .tabItem { Label("我的", systemImage: "person") }
                .tag(1)
        }
        // onChange监听值本身,不需要$
        .onChange(of: currentTab) { newValue in
            print("切换到标签\(newValue)")
            // 这里写你需要触发的业务逻辑
        }
    }
}

内容的提问来源于stack exchange,提问作者HAHALOSAH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:51:03