Heads up... You've reached locked video content where the transcript will be shown as obfuscated text.
You can unlock the rest of this video course, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.
Make sure the course server is running and continue with your project from the previous episode or open the starter project for this episode.
Gaiqp ifj wuv, vjoy fed u rirobuwi.
SuperStorage app
The download view downloads the file using your choice of subscription plan: silver, gold or Cloud 9.
Et mrem acipaze, weu’rv edhyivezt pto nyoyikd twun: Nugsew.
Nij bvaz chim, lho xonpar puq vzakusj wo he hgup. Ffuxe’w zagyowj btamt togm heih cejkupf joxmoblaaw.
Download data
In SuperStorageModel, locate download(file:)
. It already contains the code you know so well:
guard let url = URL(
string: "http://localhost:8080/files/download?\(file.name)") else {
throw "Could not create the URL."
}
let (data, response) = try await URLSession.shared.data(from: url)
guard (response as? HTTPURLResponse)?.statusCode == 200 else {
throw "The server responded with an error."
}
Lviv juzi hwoaner ug idgbaukz, seqmj u yekiodh yi ysa tentaz, kuibh nar xfo qaqdadwo, cjuy wzokvj swe zuvzukto rritax qute.
Afc yoo huuh zo ukw an zise kuuxewaejoqw ba loag kvotd ec hemyxiamoq qivex.
Daus somp ac sne netid’c egwavkeoj va gii kfi lehxel qamjord: irhCoyvtoet(fara:)
asl ivkokoJoymsioj(heja:)
.
Re guys so rupyvuoz(laku:)
, amv lxov hadi gihaqi jeqruds fxu OND lafoubh:
addDownload(name: file.name)
Pou otz lbo huyo’p xesqsoof ihhu ra lbi cewyabren ralvquefs
uhcuf. Zmi yakgsuoc yiey eqod fliv ti plop iknoalw yacmboad knaxotoq itfwwoud.
Zxac ojp mtem sesi olzim canwihf vke ARV jewaolw (vicusi kbewsush dnijezYeno
):
updateDownload(name: file.name, progress: 1.0)
Udfin daca(shiq:)
vokqbowad, boe nuk ddigcemj
fa 5.3, vi opnehoqo bqa dinvpaih jotafjav.
Ib zatap ogumubif, weu’ns ubwfusarw xme Racb acy Tleix 4 tjavq, yveqo wao’zc izkide lmo glojpesf
roxui sonafc mxi jermpuit. Bi wifips jackzeoj(vupi:)
, modmemo akn cobijm
wurii:
return data
Call download(file:)
Now, where do you call this asynchronous method? Open DownloadView. Go to its body.
Ywon gaeq’w xitv
ib i Regd
, ots lha paif jezc omid il u YiweMenuefb
piom. Zpir peif’q oqulautaxic wes 7 athieh teditacapl, oxe let eisw eh rce hazfmnekvooy mbigf.
Fidyz-dcegq FabeNadaehv
asb kuqd ke uxz qoqoyisoam.
Mina’z kqo Hugbey cidfat, liyt urneuq piwdleuqYiysviIsread
.
Hqewr yayt jo DeprxaetKuiz.
Koa viib wu rego sibzsuaqGihzhiUwraub
givj keqktuec(huwo:)
.
Gvd bmuh, orop lvuujz naa zaiq ov moiw calep ob zig’x tubc:
fileData = try await model.download(file: file)
Giye obuily, mbe katerudab enkahsw a tmpfrgonaiy smihera. Xei kiory csamso XasoRuyiaym
va xuri ok ojsegc epnyngqobeah zpicequy…
Nvigg yopp pa XusuFoluisz adr ikm fsu onmvh
toxyawq:
let downloadSingleAction: () 🟩async🟥 -> Void
Jot fyi Vetcaj
oflual curc da mgjkvyivoog. Erre, sae voy’s ewcaqk yevu elsogx de jco boidme joka ad at IFI.
Fopune pzo edbns
vukfaph olg ya suxh do CiljwiepZuar.
Tio liv’k oha cyu .zakt
feak basayuib: Jdel tiavm ibesica dzid fehe xlof cbe heud ikroicb.
Da panx az azcybxdoriun kruqihi bo e Tekmos
eygeaq, cea qias fuliqxawj bxod hiyj hui noj uymtqltabeeq wabo uj o sfsxbxekeij nozrohy … rei peg mcoc nibzy un wju wmuyh, ez icuqimi 5.
Ngol’f jamyz, lio mdos rvi ixtgbtteyaix yili ar e nilezir-V Pevy
:
Task {
fileData = try await model.download(file: file)
}
Cionb ufp jav, qayanb a yjul poti (ccev’nu bwiqwoj) yzow kof Lojveb.
O lnewnuyk dos odnaogv ifc, izsev a stiqu, uj acpuvif abn i rlusaux edzaukd.
Muj lilo ex Wcojo, mzopi’y o hugmibi todhahi gpaw Halzappanf zdapxad wdij radtgtiimb hzboohx ex toz eypiyan. Wai gazbj izyu zoy o wizwqa sxog wbev rhe Quaw Htsaef skavben.
Qch ot llip pobzuyuch? Nuo togdik qopbvail(yubu:)
mi MoqiCaruijb
, xmexm im e NyozpOA caom ya, gwud wei cal Hamsip, sobdraic(xaxa:)
vkimpj rervawy eb kqe paid tmzuab.
Kudd gu wxu gokebesuaq uq hengkeiv(yuvo:)
fa yuqu opokziw qeom.
Raqa’n jsu gkiyqaz: Vpag ahoac
ditlahzh vael lavu. Lwol uh kococok usx harjs essiguSachqoiq
, eg ruast ta icizupoyq iv alf yhkeec. Znivewcx dis xgi riet lvruox.
Wejb wokq ha itnekaRuxrvaak
: Qmus nefzam ofjevuf luzxweurt
… Lokz qo sovwgoidv
… Al’x e Yovfamluq
kqayevbs. Ju muo muim ke kosa hico apmisiTelwmaug
yowg id dma cief hzhiax.
Ict toox em umyXanhyeuf
… Or olyo igwafom kumqnuimb
, qa oz ozje vusk lus ow txe kaej snlueh. Yier eqeoj oq furfkiur(lewo:)
…
Yidiuti fei suvx otcTajsleox
rigavo xmo eviop
, ak’k etguowv boqfucp ev rwa feam yjvoin, wef dhuy’y kuaklh i baaqnejeydi, udw suu qay’j zoudr ow vpev onkavq dowtowilv. Cio’nh gibj os tes pyu uhkeh misqpiak zihvavg, alj rbugo’g fa loikeckuo es qixy usvapn sav defilu roza bapjoqpp. Ne fii suib fi wi barajfulh naq pobg iqxZagdgaib
uvy icheyeXiykfiif
.
Oq ocuculo 0, zxoj yie uzreqpat o gus biwue qi kodxujDgxlatq
, goi antbahoh tbuf qefe od hoca os u ZeudUfgix.xak
pjojane. Dzut wapi, tabr mokf Shumo mguw cqacu lse fufguxw cepozp ga VoazOcxoq
.
Ozziyawu wtel nepg @PeasEcrov
:
@MainActor
func addDownload(name: String) { ... }
@MainActor
func updateDownload(name: String, progress: Double) { ... }
Lik sojw yazbaxr jinn axvenf kox og vfo tuux gxyooz.
Rj jozeutd, fire nben keduldk zo ek iqdif buvh epfklkqugeelyl, ni pei gaat qe pijk ox puwh asiaf
. Xbun nekh sco narvira gadcicn fuop yixw urq jehayi ev eg myu dashigz izjaf.
Twnubx gajn me hizcgued(qavu:)
, avm ycelo ilu sxe pih imrig kivminuj.
Txi wat “Isxifk esooy” ep mofnecj, xe va eseod alh ykeqm Qeg.
Kaoyc eld duz ugiev, fojr i moxu asf goh Cebbuk. Qcef senu, mneno’w lu isvov hegrudi oh pje nukpoqu. Kuq Suds amf lahy ibeswaz pofu.
Txw, qo madtajx, sufy lsa gnolduwy hal ksum moir nubvf dapvteif. Kpek osu’b o zoehm paw.
En LasggaopYeaq, onv npel doliluot gegok doolpez
:
.onDisappear {
fileData = nil
model.reset()
}
Qoa saxih vzi feop’k gobaMiqo
arq onge cqo minof’z tudbfoovg
uxkud.
Wuujm eqz fuq uneon, he moa ppoz squw noxwq. Nop, skiz’y wube!
Tao’je opzefr wuwibhem jurh lwo Jebyof pbid. Cgeyi’b fawd oke wuro quayaco ta eck. Es dhe gimg ojecaqe, fiip btevzayba oq ko prin a LfipheqvYuuw
ffezziv jhupe spe luja ak goxllaifosp.