Я пытаюсь загрузить файл, используя URLSession в пакете Swift. Это мой код:
public class Downloader: NSObject, URLSessionDownloadDelegate {
private lazy var session = URLSession(configuration: .default,
delegate: self,
delegateQueue: nil)
var semaphore: DispatchSemaphore?
public func download(fileAt url: URL) {
semaphore = DispatchSemaphore(value: 1)
session.downloadTask(with: url).resume()
semaphore!.wait()
}
public func urlSession(_ session: URLSession,
downloadTask: URLSessionDownloadTask,
didWriteData bytesWritten: Int64,
totalBytesWritten: Int64,
totalBytesExpectedToWrite: Int64) {
print(Float(totalBytesWritten) / Float(totalBytesExpectedToWrite))
}
public func urlSession(_ session: URLSession,
downloadTask: URLSessionDownloadTask,
didFinishDownloadingTo location: URL) {
print(location)
semaphore?.signal()
}
}
Проблема в том, что когда я пытаюсь использовать это, приложение существует сразу, без ожидания. Я знаю, как настроить семафор с обратным вызовом замыкания, но этот подход не работает. Мне нужно получать обновления прогресса, поэтому я не могу подходить к закрытию.
Если кто-то может помочь, это было бы здорово.