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

如何预览使用@Bindable的SwiftUI子视图?

解决SwiftUI @Model + @Bindable子视图的预览崩溃问题

问题原因

@Model 标记的类属于SwiftData框架,它的实例必须关联到ModelContext(SwiftData的上下文环境)才能正常工作。直接创建实例或用.constant()传入的方式,都没有为对象提供必要的SwiftData上下文,导致预览运行时崩溃。

正确实现方式

在预览中创建一个内存中的临时ModelContainer,将测试用的FamilyMember实例插入到上下文,再把容器传递给视图,让@Bindable能正确关联到SwiftData环境:

#Preview {
    do {
        // 创建仅存于内存的ModelContainer,避免持久化测试数据
        let container = try ModelContainer(
            for: FamilyMember.self,
            configurations: ModelConfiguration(isStoredInMemoryOnly: true)
        )
        // 创建测试实例并插入到上下文
        let testMember = FamilyMember(name: "Family member")
        container.mainContext.insert(testMember)
        
        return MemberView(member: testMember)
            .modelContainer(container)
    } catch {
        // 处理容器创建失败的情况,预览会显示错误信息
        return Text("预览初始化失败:\(error.localizedDescription)")
    }
}

补充说明

  • 使用isStoredInMemoryOnly: true可以确保测试数据不会被持久化到本地,每次预览都会生成全新的测试实例。
  • 必须将modelContainer(container)附加到视图上,这样子视图的@Bindable才能获取到正确的SwiftData上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:19:54