为了提供一些上下文,我在我们的应用程序中编写了一个订单跟踪部分,它每隔一段时间就会从服务器重新加载订单状态。屏幕上的 UI 是在 SwiftUI 中开发的。我需要屏幕上的可选图像,该图像随着订单在状态中的进展而变化。
当我尝试以下一切正常...
我的 viewModel 是一个 ObservableObject:
internal class MyAccountOrderViewModel: ObservableObject {
这有一个发布的属性:
@Published internal var graphicURL: URL = Bundle.main.url(forResource: "tracking_STAGEONE", withExtension: "gif")!
在 SwiftUI 中使用如下属性:
GIFViewer(imageURL: $viewModel.graphicURL)
我的问题是该graphicURL
属性的占位符值可能不正确,而我的要求是它是可选的。将发布的属性更改为:@Published internal var graphicURL: URL?
会导致我的 GIFViewer 出现问题,该问题正确地不接受可选 URL:
Cannot convert value of type 'Binding<URL?>' to expected argument type 'Binding<URL>'
尝试明显的展开graphicURL
会产生此错误:
Cannot force unwrap value of non-optional type 'Binding<URL?>'
使这项工作的正确方法是什么?我不想在属性中输入一个值,并检查该属性是否等于占位符值(即将其视为 nil),或者假设该属性始终为非 nil 并且不安全地强制以某种方式展开它。