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

问题描述 投票:0回答:1

我有一个 SwiftUI 视图,它正在从父视图传递绑定。我想预览子视图,但不能。我直接尝试了 .constant 和 @Model 对象。这两种方式都会使预览崩溃。

知道如何让它正常工作吗?

@Model
class FamilyMember: Identifiable {
    @Attribute(.unique) var id: String { name }
    var name = ""

    init(name: String = "") {
        self.name = name
    }
}


struct MemberView: View {
    @Bindable var member: FamilyMember

    var body: some View {
        Text(member.name)
    }
}

#Preview {
    MemberView(member: FamilyMember(name: "Family member"))
}

#Preview {
    MemberView(member: .constant(FamilyMember(name: "Family member")))
}
swift preview swift-data xcode15
1个回答
0
投票

我认为这是一个错误,但使用这个包装器你可以解决它。

struct SwiftDataPreviewWrapper<Content: View>: View {        
    @ViewBuilder var view: Content
    
    let modelContainer: ModelContainer
    
    init<S>(of type: S.Type, view: () -> Content) where S : PersistentModel {
        do {
            modelContainer = try ModelContainer(for: type, configurations: .init(isStoredInMemoryOnly: true))
            
        } catch {
            fatalError("Could not initialize ModelContainer")
        }
        self.view = view()
    }
    var body: some View {
        view
            .modelContainer(modelContainer)
        
    }
}

然后你可以将它与任何像这样的

@Model
一起使用

#Preview {
    SwiftDataPreviewWrapper(of: FamilyMember.self){
        MemberView(member: FamilyMember(name: "Family member"))
    }
    
}
© www.soinside.com 2019 - 2024. All rights reserved.