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

SwiftUI随机电影应用结果数量筛选功能失效求助

解决SwiftUI筛选视图设置无法同步的问题

问题根源

当前代码的核心问题是状态传递逻辑错误:

  • FilterView使用@State存储numOptions,无法与父视图RandomiserView共享状态变更
  • Done按钮中新建RandomiserView实例的操作完全无效,不会更新原视图的状态
  • RandomiserView向FilterView传递的是值类型,而非双向绑定通道

修复步骤

1. 将FilterView改为双向绑定模式

把FilterView里的@State替换为@Binding,让它能直接读写父视图的状态:

let optionRange = 1...10
@Binding var numOptions: Int // 改为Binding类型,移除默认值

var body: some View {
    NavigationView {
        VStack {
            List {
                VStack {
                    Picker("Nr. of options", selection: $numOptions) {
                        ForEach(optionRange, id: \.self) { option in
                            Text("\(option)")
                        }
                    }
                }
            }
            Button(action: {
                self.presentationMode.wrappedValue.dismiss() // 仅关闭视图,无需新建实例
            }, label: {
                Text("Done")
                    .foregroundColor(.white)
                    .frame(width:300, height: 50)
                    .background(Color.accentColor)
                    .cornerRadius(10)
            })
        }
        .navigationTitle("Filter")
    }
}

2. 调整RandomiserView的Sheet绑定逻辑

RandomiserView保留@State作为状态源,在弹出FilterView时传递状态的绑定引用:

@State var numOptions: Int = 3
@State private var isShowingFilters = false // 补充缺失的弹窗控制变量

var body: some View {
    NavigationView {
        VStack {
            Spacer().frame(height: 10)
            Button("Filters") {
                isShowingFilters.toggle()
            }
            .font(.headline)
            .foregroundColor(.white)
            .frame(width:300, height: 50)
            .background(Color.accentColor)
            .cornerRadius(10)
            .sheet(isPresented: $isShowingFilters) {
                FilterView(numOptions: $numOptions) // 传递绑定而非单纯的值
            }
            
            // 其余视图代码保持不变...
        }
    }
}

额外代码修正提示

RandomiserView的Randomise按钮代码存在两处明显错误:

  • 循环变量名重复:for randomNumbers in randomNumber 应改为 for number in randomNumbers
  • 闭包引用未定义变量:fetchedRandomMovies.append(movie) 需修正为正确的电影对象(这段代码看起来冗余,可考虑移除,因为后续已通过fetchMovie获取单部电影)

内容的提问来源于stack exchange,提问作者Joost van Grieken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:38:25