Swift environmentObject预览报错
Swift environmentObject预览报错

Swift environmentObject预览报错

问题描述

在视图当中,因为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

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注