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

SwiftUI:如何在预览中添加两个修饰符避免画布崩溃?

SwiftUI预览中正确添加Environment Object的方法

你当前的问题是把.environmentObject修饰符错误地加到了Binding参数上,这会导致语法错误和画布崩溃。正确的做法是:先创建ArrayView的实例,再给这个实例链式添加环境对象修饰符,而不是绑定到初始化参数上。

修正后的完整代码

import SwiftUI

// 确保DataExample符合ObservableObject协议(补全便于参考)
class DataExample: ObservableObject {
    @Published var textArray: [String] = []
}

struct ArrayView: View {
    @EnvironmentObject var data: DataExample
    @Binding var text: String
    
    var body: some View {
        VStack {
            Button(action: {
                data.textArray.append(text)
            }) {
                Text("Push onto array")
            }
            List(data.textArray, id: \.self) { string in
                Text(string)
            }
        }
        // 这里无需重复添加.environmentObject(data),环境对象由父视图/预览注入
    }
}

struct ArrayView_Previews: PreviewProvider {
    static var previews: some View {
        ArrayView(text: .constant("String"))
            // 将环境对象修饰符作用于视图实例本身
            .environmentObject(DataExample())
    }
}

关键说明

  • .environmentObject是View类型的修饰符,必须作用于ArrayView的实例,不能绑定到初始化时的Binding参数上。
  • 预览中通过.environmentObject(DataExample())注入环境对象,画布就能正确获取@EnvironmentObject依赖,避免崩溃。
  • 原代码中注释掉的.environmentObject(data)无需开启,因为data本身是通过环境注入的,重复添加会引发冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:15:43