Нативная разработка мобильных приложений


URLSessionDownloadDelegate



Download 3,69 Mb.
Pdf ko'rish
bet111/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   107   108   109   110   111   112   113   114   ...   228
Bog'liq
Нативная разработка мобильных приложений

URLSessionDownloadDelegate
URLSessionDownloadDelegate
содержит несколько необязательных методов для 
реа лизации в объектах, предназначенных для обработки событий, возника
-
ющих в процессе загрузки. Вот, например, как можно реализовать делегата, 
добавить его в 
URLSession
и создать задание загрузки, обновляющее прогресс:
class NetworkClient: NSObject {
// ...
}
extension NetworkClient: URLSessionDownloadDelegate {
func urlSession(_ session: URLSession,
downloadTask: URLSessionDownloadTask,
didFinishDownloadingTo location: URL) {
// Проверить наличие ошибок на стороне сервера
guard let response =
downloadTask.response as? HTTPURLResponse, response.statusCode < 300 else {
return }
// Вывести местоположение временного файла
print(location.path)
}
func urlSession(_ session: URLSession, task: URLSessionTask,
didCompleteWithError error: Error?) {
if let error = error {
print(error.localizedDescription)
}
}
func urlSession(_ session: URLSession,
downloadTask: URLSessionDownloadTask,
didWriteData bytesWritten: Int64,
totalBytesWritten: Int64,
totalBytesExpectedToWrite: Int64) {
let percent = (totalBytesWritten/totalBytesExpectedToWrite) * 100
print(percent)
}


168

Сетевые взаимодействия
}
let url = URL(string: "https://www.example.com/file.zip")!
let client = NetworkClient()
let urlSession = URLSession(configuration: .default, delegate: client, delegateQueue: nil)
let task = urlSession.downloadTask(with: url)
task.resume()
Рассмотрим этот пример подробнее.
Сначала определяется новый класс 
NetworkClient
, наследующий 
NSObject
– ба
-
зовый класс для всех объектов в языке Objective-C. Для этого класса опреде
-
ляется расширение, в котором реализуется протокол 
URLSessionDownloadDelegate

Первый метод, 
urlSession(_:downloadTask:didFinishDownloadingTo:)
, является обя
-
зательным: когда задание загрузки завершится, оно вызовет этот метод, чтобы 
сообщить, где находится временный загруженный файл. Также в теле этого ме
-
тода можно обработать ошибки, возникшие на стороне сервера, проверив код 
состояния в свойстве 
response
объекта 
downloadTask
.
Следующий метод, 
urlSession(_:task:didCompleteWithError:)
, является не
-
обязательным, но в промышленных приложениях лучше не пренебрегать им. 
Здесь можно обработать ошибки, возникшие на стороне клиента, и проверить, 
не возникли ли проблемы, препятствующие успешной загрузке файла. В этом 
примере мы просто выводим описание ошибки в консоль.
Наконец то, ради чего мы написали этот пример, – передача прогресса за
-
грузки в приложение. Последний метод в расширении, 
urlSession(_:downloadTa
sk:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)
, вызывается перио
-
дически с интервалом, определяемым сетевыми подсистемами в iOS, и полу
-
чает значения 
totalBytesWritten
и 
totalBytesExpectedToWrite
. Эти значения можно 
использовать для отображения на экране чего угодно, от текстовых меток до 
компонентов 
UIProgressView
с полосой прогресса. В нашем примере мы выво
-
дим значение в консоль, но вы можете воспользоваться своим воображением, 
чтобы представить, что вообще возможно!
В конце примера создается экземпляр нашего класса, который затем пере
-
дается в инициализатор 
URLSession
в параметре 
delegate
. Обратите особое вни
-
мание на две строки, где это происходит:
...
let urlSession =
URLSession(configuration: .default, delegate: client, delegateQueue: nil)
let task = urlSession.downloadTask(with: url)
task.resume()
Сначала создается экземпляр 
URLSession
, а затем, в следующей строке, он ис
-
пользуется для создания экземпляра 
downloadTask
. Мы не использовали экземп-
ляр 
URLSession.shared
, как в предыдущих примерах, потому что нам понадоби
-
лось определить делегата, а в 
URLSession
это можно сделать только с помощью 
инициализатора.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   107   108   109   110   111   112   113   114   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish