问题描述
在视图当中,因为Class改为environmentObject传递后,预览为空或报错。
正常情况下,右侧的预览会显示汇率的国家和数据。
因为汇率数据是需要请求网络的,所以需要调用同步的方法。
let updateERInstance = UpdateER()
Task {
await updateERInstance.update()
}
因此,在原来的基础上声明了一个实例,并使用Task调取该实例的同步方法。
如果重新预览会发现新的报错代码:
Result of call to 'environmentObject' is unused
这是因为#Preview的代码需要返回一个SwiftUI视图实例。
因为我们有多个代码,所以#Preview无法判断返回的视图。
解决方案为,在视图前面添加 return 关键字:
retrurn HomeView()
.environmentObject(updateERInstance)
现在问题解决了。
视图代码
#Preview {
let updateERInstance = UpdateER()
Task {
await updateERInstance.update()
}
return HomeView()
.environmentObject(updateERInstance)
}
总结
大部分的#Preview报错的原因在于,没有导入、配置相同的参数或环境。
解决方案大都是将对应的类导入到视图当中,或者创建对应的实例并运行需要的实例方法之后,再导入到视图当中。
另外,#Preview因为接收一个View视图,所以当#Preview代码中,有非视图代码或多个视图时,就需要通过return 关键词来选择返回的预览视图。
如果该文章未能解决你的问题,可以参考一下类似的预览报错文章。
《Swift UI #Preview预览传参报错》、《Xcode报错:Settings initializer is inaccessible due to ‘private’ protection level》、《Xcode报错:Thread 1: signal sigterm》、《Xcode报错:Non-constant range: argument must be an integer literal》