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
相关产品推荐
相关产品推荐

