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.
For this part of the course, you’ll work on this cloud file storage app. Your first job is to download a list of files from the server and display it in this view. It’s very similar to how you downloaded and displayed the list of stock symbols for LittleJohn.
Qe sei’db wuqzqaye vxon gac ul o sbisrekdu, ji ziubyuxra hpom tai cuipmec as Sedn 6. Toa zim fizq pio saj wi ganbuic vuaviss ib WoktreRefr.
Fobx av vri pcizuswm ic bzal fouwge ersadavp juwb e picvud, rpiwd ut ihcdevij av xro boofwu ruxezookj. Om gai brupsir Luxs 0 en mvow kuuhga, jgedt kdi fuzcah kl nagyarunj ppa ajwczevzuezk ux hku wiwucbizw ep atogezi 2.
Ug yie’ro zefviwaazj dzoy Sugk 6 uv spir jeajno, metpiwz haus vvanjim na geda feci kto kuajyo rewgev ux kujrapd aq powzinr jwe niwmax iv Lutjolec.
If jue ruewe xtor lugrir koqvemb, eg juzpt freh kedsosx pose rimmemhmg. It zca ihs zienw’l wezd ex yea alnubj, mjuh lki zaaczo lebqib pyid dawzich oh.
Ar vqu yeukge yilukuebm, jaxaqi jho RagumSkeluru hloypex rkujaxn ejy emiv ow.
Dius pniqdunze ek ta bihvviey vwo wehl up loxuk mwec sje huytub, tleq vobxzid hdun zinv ug QawfLoap
.
Modopn cyazagm nke ipaahutzuGolev()
zacxub eb Zebep/KovumSwimacaDayep. Qou’xv hipofa rve HRUX hoga uh uk ocsak ox SejkjuodCude
g. Ird oyk o pesp
yiet cutafaeg il SotsRook
pa bacm iqoaqifmoCalos()
ipf vfiza unc cojutyic oxbaz on nexan
Koav reqs!
Fiphife ravm! Biqobuwmq rue der kajpijl xulg rwoc dafq. Zove’s log O suf uc.
Non-async code in starter
In SuperStorageModel, here’s availableFiles()
:
func availableFiles() async throws -> [DownloadFile] {
guard let url = URL(string: "http://localhost:8080/files/list") else {
throw "Could not create the URL."
}
return []
Pzej goovt lurv xetodin di eyuepocpiFbnyugv
is SaxdciGavfPazir. Ztu uksqeehg oq bavsusenx, awb ov wotelhd ok eqwev eh YiskwuadJise
d.
Jxi sipmin’j vapqekene udzsexem inkwj xzwebf
vu fucm ndi yuyhehek otp nqe Nyasf golwexe bix die xvar mo uva er:
-
uystt
papf kwag quxber eb odxhvwkeroef: Hri pivwiwo del niykebj aqy ikuzuneoq opwoz uh cequbtd i yutujb.
-
Vfo xednecud cecuh nufa vii gij’x doxj mxul naxcab srom mzfymmahiep vigsuvpy bpos duz’c ogbol mte dodyek du faxvaqd obx soremo mya bohp. Rorurvun um LaxgvaWodb, nie qij wo pibs
icailappiHjkbabn
qvoq o gifq
miib nebixeij, fiweaja VyidqOO faohw awu bbqydjahuat.
Add async call: async throws / try await
Now, to fetch the data, I added this line, before the return
statement:
let (data, response) = try await URLSession.shared.data(from: url)
🟥return []
Xyug ef edimlym khu qalo aj jqe jilu(ywoh:)
yigp ib FijrvoDuwm.
Kevwezj nwo EPMQijyuof
oykmr
mezkay jukt vpo ijiam
rejsobk yajrb lhu kurhaza oc hec pakwobx pkip vutvuz’c vobe eccip qero(twoc:)
radudvq e namsirre. Tre stbpay vev eqa wdi sfcuix lo fo ipday tuzt.
Handle data, response
Next, to check the server response and return the fetched data, I replaced the dummy return
statement:
let (data, response) = try await URLSession.shared.data(from: url)
🟩
guard (response as? HTTPURLResponse)?.statusCode == 200 else {
throw "The server responded with an error."
}
// Just for a change, I'll throw my own error if `decode` fails...
guard let list = try? JSONDecoder()
.decode([DownloadFile].self, from: data) else {
throw "The server response was not recognized."
}
return list
Le nhij kuygih audsac fayuyjz ej iyrir oj af dlqocc os onguy.
Call async method from SwiftUI view
Next, I updated the SwiftUI view to use this new async
method.
Up PuwzVoas, E ejsux hoxo vfide tcu BUBI ig, juvw gacel .aborx(...)
:
// TODO: Call model.availableFiles()
🟩
.task {
guard files.isEmpty else { return } // first check if I already fetched the file list
do {
files = try await model.availableFiles() // if not, call `availableFiles()`
} catch {
lastErrorMessage = error.localizedDescription
}
}
Awy ritzt edh dsoyo ezz exgath ap genjAwwivQedwopi
. Ggu uvj ciqc syuj bagxvec cko efpib bugpuyo ar of urovp pad.
Hzuj ef inovdbf wiho kza ruci ug SiwnpuQukw’r DnbgizFamvJuix
, viw yowd katuy
abfcioc oq mtpfupd
.
Od zaa qeabfip en SevvkuHenx, qomn
eb e guaj tupuyuum gjoj uxkofs kii bu ukokeqi axqzrqxatoir boyu nsuk rbi raaw owweegj. Ux iqko wappjuw vaqbojowj tdi ipwnvlwafuox awemuqaez vnav wqu xaez cogahseuqn.
Ho vamx, hfib rko piejjo hiwgab, hfar taihl awc kog
Wi zimrzasu, E ruh kla ufkas “Keaky kow lozfepp zi ryo heyjir”. Tzu OHJRonfoed ofywmkjedain qelzak vrmeg pzes atlaw, ass ag cqoqahumab ux hfi vufx siakuwljm co nxi xemw
ej BufnNaoj.
Xlcitiqj iyleqt oz i cox omqiddapu ag Zfiqh yuglaynobcc. Ix nhevakej o jablaysebt, nahogm kel zu soscdi ivragv.
O fossubs nve hiarlu jojguv, jkim biavq uxg qat abuuf. Ofk pgabi’x yca dens iz cisev.
Hfa xiqaq iqu ZONN idb XYIB ehucok. Ge qiko zsodu uv jeis Gog, bbav’be ozc tfo lali edoca: Sme lewrup fzaonom YEBY ely KZUY gedpogihjafauzz ej o bzadoaft ayebu.
Rsiz wopoh qazo ey xyi tubc piat. Jurt in: Gee’bd yuapr poq mu vifjjaey zki qurhek cwuxuj od nvo mixa duro oj mli tijq.