SWIFT 5:确定的循环进度指示器的增量值异步

时间:2020-03-28 10:05:40

标签: swift

我进行了很多搜索,但是找不到确定的循环进度指示器的很好解释。

我有一个将PDF转换为图像的Helper-Class。我有400多页,所以我决定使这些内容与以下代码异步:

DispatchQueue.concurrentPerform(iterations: pdfDocument.numberOfPages) { i in
    … do the work …
    view.incrementProgressIndicator()
}

洞察ProgressIndicator所在的视图,所调用的函数如下所示:

func incrementProgressIndicator() {
    self.progressIndicator.increment(by: 1)
}

可以肯定,斯威夫特说:“在后台线程上调用了UI API”。

我试图用以下代码包围递增代码:

DispatchQueue.main.async {
    self.progressIndicator.increment(by: 1)
}

但是现在,所有指示工作都是在 完成PDF转换之后完成的。

有人可以告诉我该怎么做吗?我找不到适合我的问题的实用教程。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我找到了解决我问题的方法。我替换

DispatchQueue.concurrentPerform(iterations: pdfDocument.numberOfPages) { i in
    … do the work …
    view.incrementProgressIndicator()
}

具有以下代码:

for i in 0..<pdfDocument.numberOfPages {
            DispatchQueue.global(qos: .background).async {
                let pdfPage = pdfDocument.page(at: i + 1)!
                if let result = self.convertPageToImage(withPdfPage: pdfPage, sourceURL: sourceURL, destUrl: destinationURL, index: i) {
                    urls[i] = result
                }

                DispatchQueue.main.async {
                    if let delegate = self.delegate {
                        print("Ask for Increment")
                        delegate.incrementProgressIndicator()
                    }
                }
            }
        }