我有一个 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")))
}
我认为这是一个错误,但使用这个包装器你可以解决它。
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"))
}
}