ios - SwiftUI 上的 previewProvider 无法加载
问题描述
今天我想知道是否有可能在 SwiftUI 上使用PreviewProvider
它来设计一个视图,当你有模型时很困难,因为你需要“初始化”每个模型和属性才能看到 UI 模拟器。前任
struct SimpleView: View {
@State private var number : Int
var body: some View {
ScrollView{
VStack{
Text(String(number))
}
}
}
}
struct SimpleView_Previews: PreviewProvider {
static var previews: some View {
SimpleView(Int: 5)
}
}
UI 预览效果很好!
但是,如果我需要使用具有 40-70 个属性的自定义对象怎么办... :(
有没有一开始没有“硬代码”的工作方法?
太感谢了
解决方案
一种方法是创建一个mockViewModel
类属性,该属性返回具有可用于预览的固定值的实例。
在这个例子中,支持模型对象是一个 Core Data 托管对象。
在正常使用中,您调用ProjectDetailViewModel(project:)
初始化程序。
对于预览,您可以使用该mockViewModel
属性
class ProjectDetailViewModel: ObservableObject {
@Published var name: String {
didSet {
self.project.name = name
}
}
@Published var notes: String {
didSet {
self.project.notes = notes
}
}
let project: Project!
init(project: Project) {
self.project = project
name = project.name ?? ""
notes = project.notes ?? ""
}
private init() {
project = nil
name = "Mock project"
threePhase = false
notes = "Mock Notes"
}
static var mockViewModel:ProjectDetailViewModel {
return ProjectDetailViewModel()
}
}
struct ProjectDetailView_Previews: PreviewProvider {
static var previews: some View {
ProjectDetailView(project: ProjectDetailViewModel.mockViewModel)
}
}
推荐阅读
- java - 尝试在空对象引用上调用虚拟方法 'androidx.lifecycle.LiveData com.example.xxx.viewmodels.CoffeeViewModel.getAllOrders()'
- rust - 有没有一种好方法可以让服务器的客户端直接访问其他客户端而不使用互斥锁?
- google-cloud-automl - 当他们说:“至少 8、1、1 个边界框分别分配给您的训练集、验证集和测试集时,谷歌是什么意思(谷歌云视觉 API)
- asp.net - 在引用的 dll 中获取 ASPNET CORE Web 应用程序的根文件夹位置时面临问题
- python - docxtpl 中的上下文未更新
- python - 部署 PWA 问题
- r - 条件下拉面板数据
- r - XML 文件到数据框 - 巴西参议院
- java - 如何使子字段影响父方法
- angular - 如何在 Angular 中使用泛型与 mixins 相结合来扩展类?