Swift ';随需应变资源&x27;下载进度指示器

Swift ';随需应变资源&x27;下载进度指示器,swift,swiftui,on-demand-resources,Swift,Swiftui,On Demand Resources,我有一个SwiftUI项目,我正在利用苹果的按需资源(ODR) 我想显示一个进度条,指示资源的下载进度 我所尝试的: 以下代码请求ODR资源,将NSBundleResourceRequest存储在静态属性中,以便在其他地方可用: class OnDemandResources { static var request: NSBundleResourceRequest? func loadMusic() { OnDemandResources.request =

我有一个SwiftUI项目,我正在利用苹果的按需资源(ODR)

我想显示一个进度条,指示资源的下载进度

我所尝试的:

以下代码请求ODR资源,将
NSBundleResourceRequest
存储在静态属性中,以便在其他地方可用:

class OnDemandResources {
    static var request: NSBundleResourceRequest?

    func loadMusic() {
        OnDemandResources.request = NSBundleResourceRequest(tags: Set(["Music"]))
        
        OnDemandResources.request?.conditionallyBeginAccessingResources { resourcesAvailable in
            DispatchQueue.main.async {
                if resourcesAvailable {
                    //Resource is already on the device. No need to download.
                    
                } else {
                    //Resource needs to be downloaded.
                    
                    OnDemandResources.request?.beginAccessingResources { error in
                        DispatchQueue.main.async {
                            if error == nil {
                                //Success
                            }
                        }
                    }
                }
            }
        }
    }
    
}
然后,我使用
UIViewRepresentable
连接
UIProgressView
,将视图的
observedProgress
属性设置为前面提到的静态请求对象的
progress
属性:

struct ProgressBar: UIViewRepresentable {
    
    func makeUIView(context: Context) -> UIProgressView {
        let progressView = UIProgressView()
        
        // Use the static NSBundleResourceRequest:
        progressView.observedProgress = OnDemandResources.request?.progress
        
        return progressView
    }

    func updateUIView(_ uiView: UIProgressView, context: Context) {

    }
}
根据,设置
observedProgress
属性应导致进度值自动更改:

设置此属性后,进度视图将使用从进度对象接收的信息自动更新其进度值

最后,我在SwiftUI视图中使用我的
ProgressBar
,如下所示:

struct MyView: View {
    var body: some View {
        ProgressBar()
    }
}
结果:

进度条从不显示任何进度;这只是一个空白条

问题:

为什么我的
ProgressBar
不显示ODR下载进度?我做错了什么?是这样做的,还是有更简单的方法


谢谢大家!

您是否尝试了第4.6节所示的方法?连接一个关键路径观察器,然后监听它,也许你可以尝试将它调整为swift,看看是否适合你