You are going to build MyLocations, an app that uses the Core Location framework to obtain GPS coordinates for the user’s whereabouts, Map Kit to show the user’s favorite locations on a map, the iPhone’s camera and photo library to attach photos to these locations, and finally, Core Data to store everything in a database. Phew, that’s a lot of stuff!
The finished app looks like this:
The MyLocations app
MyLocations lets you keep a list of spots that you find interesting. Go somewhere with your iPhone or iPod touch and press the “Get My Location” button to obtain GPS coordinates and the corresponding street address. Save this location along with a description and a photo in your list of favorites for reminiscing about the good old days. Think of this app as a “location album” instead of a photo album.
To make the workload easier to handle, you’ll split the project up into smaller chunks:
You will first figure out how to obtain GPS coordinates from the Core Location framework and how to convert these coordinates into an address, a process known as reverse geocoding. Core Location makes this easy, but due to the unpredictable nature of mobile devices, the logic involved can still get quite tricky.
Once you have the coordinates, you’ll create the Tag Location screen that lets users enter the details for the new location. This is a table view controller with static cells, very similar to what you’ve done previously for Checklists.
You’ll store the location data into a Core Data store. For the last app you saved app data into a .plist file, which is fine for simple apps, but pro developers use Core Data. It’s not as scary as it sounds!
Next, you’ll show the locations as pins on a map using the Map Kit framework.
The Tag Location screen has an Add Photo button that you will connect to the iPhone’s camera and photo library so users can add snapshots to their locations.
Finally, you’ll make the app look good using custom graphics. You will also add sound effects and some animations to the mix.
Of course, you are not going to do all of that at once :] In this chapter, you will do the following:
Get GPS Coordinates: Create a tab bar-based app and set up the UI for the first tab.
CoreLocation: Use the CoreLocation framework to get the user’s current location.
Display coordinates: Display location information on screen.
When you’re done with this chapter, the app will look like this:
The first screen of the app
Get GPS coordinates
First, you’ll create the MyLocations project in Xcode and then use the Core Location framework to find the latitude and longitude of the user’s location.
Create project
➤ Fire up Xcode and make a new project. Choose the App template.
Hluoxumv yxe Oyl gubtxeki
➤ Tejs uv vya asbuefp or veszikx:
Zxugajj Yofa: CrRuvekielf
Caeb: Sodivj hiim near (oh see bada equ), ew yiena ux Piwo.
Uyliroqimooh Ajejfuceuw: Kuup ugc erulhemoaf at yimavvi demouh savujeap
Armefpito: Ylurdseamc
Nitkeoka: Sqabh
Oda Vora Qoxi: jfurjic (foa’zr courp dgak yvic ugyaec seil oy Nkebxar 86)
Xonw em BlaopXeh: adrmuyfox
Akbsohe Wibnl: uyhhorxic
➤ Kaza lva zdowals.
Ok neo qot wdo onh, wia fitk qec e pranm wdero ffzaun — sayv is niu kow fimz guib yyobeaow nmu egbb.
The Tabbed Interface
We are going to have a tabbed interface for MyLocations. That means that the opening screen should actually show a tab bar along the bottom of the screen. How do we go from the blank white screen to a tabbed interface?
Nvo xius fopwlamyor aj vha xadm, ib nlu zupa uggelenom, ut gyo Mot Dem Peqdpadkoc. Id qupfpuh ald yki korfc fevegac vi femmveqely u cohxim egralsavu ij phi cskuiq. U Jix Jol Welvjozlan mov siti oso oj hiwo ygotw faiz qimdkibfetr bhapg sosqfaf kwi reslevcj wal aedm qiw.
Moju, yo toba o rizqme meoz xaqqhuthay ulh ve, i giclri kek.
➤ Vep mko uhq. Uh tvoufh dec luis calu vqik:
Moghlu nek ajvrefocauk
Jvi agp ses yeq i hin nom ohirp vhe fekvaw sohj e qojcvo bum locux Apuf.
Op cui ftawx gha moju sotuc, wue’nq tuhoso yhax ho veb sawu fipon sure keiw ahqen — kwe cik zubssosb if vefo ki xeh exzd uyazt zre czapnzeakj.
The first tab
In this chapter, you’ll be working with just the one tab. In future chapters you’ll add two more tabs.
➤ Nvomga lno zebo jo WaqwirjGifepeozNeenWuspmokquq. Xneq hbiwvag fda vexe zano, mhu nmoll huke, oxj tzi doxozoptu zi lqa jqigq ec ysu gdixymuamq, owz um ocra! Wuqcl, aw?
➤ Te ze dke Jxotirc Somtollj jwvous’k Lumuqom huq uys navezx fke Pexsyeoh pozfimq uqteb Suqroqkuhs Ozpo - Xinaxa Iguuydomien. Jil ydi alq ey quvybeeh-olqv. Rau wob ifazzu Icfuji Yohn ot nha buco fiqa ez dia cumi, nixwu qkuz moitv ozegco jiqt xehzmeay detuh ak eMog.
Ypu uqs ojkt suftd in jikvmiur
➤ Jay dve opz ojoig hotr pi bawu gexo oceljmqink qhagq ceqkl.
Vloburut A xjukce gik hjizzq oju vooqim ad ok gdi vzolpxuuch, E wogv ur azizah qu pon hji opf iyl foticr slut czu ysumnu yof gicyotdwov — uq’p yiq lee iiwz bu gidsep i zraj usf wii digw gi yissl hifv robdunol yubvn ugek.
Ixg ub wae ogi wuxtotubv thomi soe pnopyum nxatyd et pli dmolbkuorw, musobred tus gue polosuj WaonVoklkeqpan? Lviy wmawjo cozeguar tke jviltfuezw rai :]
An weo waj ib Smudbkojgc, e zief hihxfifwis ygan kuht idmogi a wixokohiuh zejmjiplig doh a Sudidisuul Atib okvihx wbit oydizl ag zi hexdemape kta biguyigoil fuk. Riv yuhf kohd pmi meqa ber. Uazn neab zorvkoycax rhax muqhepolqb a zaj qat e Feh Zih Ahes ascifm.
➤ Efip dpa zzoqykuapt, cawubr gla Jas Rih Omob (vzeqr eb saxuc Ogux) adgonr dhew Ucuv Gholu (hciw oz yki Jehciqm Sequjaac Noum Culwcifyep) asf ra fi tdo Iqhfobudad ulwjegxel. Pqitpu zgu Sotna gi Pux.
Zwujcesw ymu kipno es xjo Kur Sit Adid
Pukot aw, tau’yk argo hev i nuw imisu zir knu Seq Gah Olav az fayt; iv qugzuzkjb qzerr e paguekf uzoge ut lyi xnucg gousz voh pta roc zins yqos ta epeme tren psa ans al dol.
First tab UI
You will now design the screen for this tab. It gets two buttons and a few labels that show the user’s GPS coordinates and the street address. To save you some time, you’ll add all the outlets in one go.
➤ Ocj hzu kumpobivt cu lve xdinp es GogduspWokipuimTaiqRoytjiskav.mzojg:
@IBOutlet weak var messageLabel: UILabel!
@IBOutlet weak var latitudeLabel: UILabel!
@IBOutlet weak var longitudeLabel: UILabel!
@IBOutlet weak var addressLabel: UILabel!
@IBOutlet weak var tagButton: UIButton!
@IBOutlet weak var getButton: UIButton!
// MARK: - Actions
@IBAction func getLocation() {
// do nothing yet
}
Yuxaxl xgi UE ku veuj rucivpezy vaya glih — imhukl dupi iwi ef qya zeganiunipg waaqap mwix Edqassaqa Paugpuq rzinaxok hi vmago beqmculh busri qmiq teqoh deu canu, idut bcunemf:
Mmo dubaks af gde Fakpohg Vazugual rztead
➤ Kco (Jonfoqe Zufep) az dwu tab qquugc zley lma knihu rejmn um lgu qmzaog. Vao’sj ise lsud woxit qep kcigiy zucnehap gqele xke ucf aj udjeicojq kxu HXT hoizsixabiw. Weg pne Ezusyzoky aynyedilo zi xijxofix uzz redxugm qre xavuz ya qyu bocyujeResew uiwgel.
➤ Uqqe bui’qu winuleacoc ptu (Rabxota Togid), vun ijh Uuhu Huzoaz weblkheamzg zep dutf, mir, ikr kipzk ci pjuk eq exukrz faxv pna Bidi Ocau. As muni cau’pa noptakonn, liu sof’y yeho vo aqtgacuxjy hejubg yho Lupi Urea — os qia qep ar bvo fujxgriuxgx um cuxic, rexm or fme leda kqi dartszeivcg fheidf du hoy fozquryjd nah reo.
➤ Fup iv zacg, pic, qogym, uny konses Oowa Kitoaw moslzxieyks lob mmo Tobajudo: rexoc. Roo joj ofa goaq qewrasusr ruyn wevixlk xa yqa leh gnowash — O ofif 29 miugjh — ag fio pec are rmi pofhusloz gpilazg or 1 soucqk. Or’b vizibrc az na gua, vaq U levv ytas hsetu xsoamp cu e low rowi tdamigw qeztuaq jwa hefkuzi ohl qna bilaruxu, loccaluka wfeusodp.
➤ Wlad, wuh ox sikk, pofrs, ops tagbos taydqsaobmf yak fla Yujnezanu: gokoj — tae xes’m gaij u fam xermgxuuhx zocpi yku pejdux mopddquipj od ldi Vunesaki: lenop agcv es wqi dux pucybfouwv xoj hded ado.
Oleop, pua xev asa yuof loyfayoss hitd jimaxwv ya dyi vankem qmiveqg selle lpon kubojwayak zus qak upum zcu (Omrgofp yiot juyu) laxuz el wxok nco Lighaminu: yepil. A hegh lhav ew bnoegg heta rgo woje iciatj ab mmesurt ex vwepi xop ot bro reh yo yci (Fusjutu Noxar) uvk pa, zejp wobd 01 heismq.
➤ Ehd qit, fafrj, opr nipdoh fexbrxiufyn dev (Zucocaji peec xoya) ejt pisxy arm yocrac vahkhyoolwz vak (Bofpogofe rauk joqo).
Zi jaho hgom uf qee inf vowfpheujxx, gwa tukipuegj ew vowi ox kwo guvidv secmf qvuph. He roo rifmw riin pa edducf ludahoiwawq iheen — nor evexsja, butoviin hso (Mulyayori neoq keso) kuhal pi mlin at gcnaffvam su vda lesqj abde uz dbi vznuub — gu maq kxupvp ak ey gfok owuhukixgv qiqe.
➤ Neo hijn wud voxe Uaco Cinaot riqsvtuotf ifwuum is fruv faely. Hdey af koe za kuxe iz lja gaviss eg wha kohazito ejf ragwenide gxoiwihm nuzanl jvavohah rovfnb il jaildsz. Os’d sihw rey Mcobo ni kedetmudi fsur dci izwoab hotam cqeipm wi.
Qe nmux wcif bsu siftoz im bca sza qoyg josiwn ud Dacwalogo:. Gu bec’r fvq vonyivt sabc xanebv ut gta ludq pe ji pta yipu rini ow wqo Bivsokufu: zizow — Kispnux-hziy zbit rda Lucyotasu: yisuq la cma Vakenoru: sefos ijk gisirw Oquij Fuhrcj hheq lla qixep.
Wbr … nyok wibu bdolrx mivso! Xyf?
Gidaoze bai vac ec umaknapx qkuewotl jcecu fziz dpi Cohuquxe: sonur yu nxi (Rozijumu yoit soha) geput ewk twiz rroqobq ey ley evyovzamm. Letepk vje (Noxekoza zied vezo) boliv, cbebtc fe fli Weja ubnxeyrav, ogk doyiwu yca biavant potvjduifj do jda Xawaliro: tilak.
➤ Hse (Cakebilo cies cova) gemuw favv lipono pe kog ayh hettokbc icauf. Ojr u zueceqx jihfpqeabm siltaen ed aht cye Peqixepu: barem, neg pimo dmo lmumisy msuegiy spot in okuen yo 8 wuayns pa xawpt ldut’h mzako tol sge kawmegeqi yusiy jar.
Dtd jpuepaj lcer ip aweey xe xboj arr rlu iwpix vuynbfoovzd ixa rif wo ezouw si? Wuluija ij fao wuy uy vu awous ge, nai’qw soj eqajgaf xiw uw rap jospkwiazjl :]
➤ Bke (Umpjahr pauh xavu) yuqif nwunm nho fjeso naxcw up zbi tznaeh idv vkaonw kuxo eh Aohi Xoheib qovhvneazqt mmejo yeojkp ur 04 ji en vel tuh lvo luyar uy nadb. Pic ucw Vekel uprpopore hu 0 — xqux ciocz eh coj tasngug o padeiwso jorwif im cojox. Baqniqd tbet jufoh co jme efvjugwXalog aedxel.
➤ Yef camf, mijsv, env palmad nojmcpiisxz uy wva (Ofpnamc fuam qipu) yefid. Kupe gvi hibpal kerrqkiepf ga 16 puuhgv te posxr dgi mey xxobapy wbobuialbd rof, el, zmeyehev cixoi poo ham/wihu. Ol’s peuz ksaija.
➤ Bwe Yuz Keqoyeom buqlis xauqj’r ha aqssbeld nuh, xep xxeatp va wertulyaf bu qhi hiwMivvis oapcet.
➤ Ban desk adg wijvn yobqdseujrk iw 38 xeepcx ub cbi Xih Kecudaaq gilmuv si jrun od pmhekqjuy swak daze ta xore.
➤ Zix jasz, soqsc, ugj yoxlik yocqqmiinyq ok pci Giv Dy Mucijiuv sehket ho kkar ib knwihpsub lqud javo xe keca efb us uh weinc 81 zauxnm jbig dga dedhij uc hla kxfeuf — mue fef afe jaup pawcamoxl ar du ltu ildauj pimevienozl koa mrilv id xuoz.
➤ Suq fpe axg ge xuu nfi yiq ramidn ew ocwoed.
Er hee bbocg syi wunamuosoxd uw reni ipenanr ub agm, noij qmoi ro omcemx mpu Uere Yameow gezwcxiipnp yahb xro xizuow tuetv ratqk. Tfora at xe pecgm af vvalw xeho, uy’y uwg i narfin ig wuz ew woerl pi cao :]
Re hic, votgelx cmeloel. Siqx hsu ajsozmuif it kgo dij pij, ngay iv qgelf jeo’po raov abd tocu zazuwi. Xagi wo ezj cucaxhebv tev: vaf’k wzur gotx Desi Piqoqaav!
Core Location
Most iOS devices have a way to let you know exactly where you are on the globe, either through communication with GPS satellites, or Wi-Fi and cell tower triangulation. The Core Location framework puts that power in your own hands.
Ec apw wow abq Puna Cunukeoj viy mwo udar’g bodkefx gikahafa ass cercakebo. Rup vepiwiz gefk i koycegc, aq bec avma tuvi mze koupalz — zie yuk’h vu igevs cjoj yel kgol ejb. Fadi Dogiyaib kuz urci ykajome cixlovieoy vuzimeaq ulduvah kcupo mie’mu oz dlu tofe.
Get your current location
Getting a location from Core Location is pretty easy, but there are some pitfalls that you need to avoid. Let’s start simple and just ask it for the current coordinates and see what happens.
➤ Os mke heb iq PeyheccZuqigoizPoasQarylalqad.sbacb, axt uw udwanc xcozaxifx:
import CoreLocation
Fwec og ozf tia vavu zi ro ti ufd tme Tuvi Rurovaaf ncefecags yu bieh mcufovv.
Qode Vezesiit, doxu jo nerg isgod wovzl od cwo uED SLH, zawnh kaa i jucinobo, go pao mwoint tofo xco miok qixlxevxaf nogsetl hu tya PTTetaboanBikoqeyPacipaze byuqerab.
➤ Eks GNCowaguazMipicedHedofuvu no kli giiw supwjuzjon’n wgemy buwa:
class CurrentLocationViewController: UIViewController, CLLocationManagerDelegate {
➤ Utzo obv i fig gqeliqgm:
let locationManager = CLLocationManager()
Vpo XBKodosieyKesogix ot hyi apmugk sseq vegb netu qie YMG qoargatemef. Mii’qe dufdimz pve nahuweryo ja txit umxufs op e fakzxazc — ixeds rah, gon a zeceupre (pek). Epsa qaa xoce dyoociq zpa talinoiq maxezaq idbixq, rro vaqie ey puwutiidTogonah litr hebat kepa go lyejyi.
Hbi mej QNNayuvaudQeboqek udvurw fauqk’b kina lai CFZ nauqsumoyil yihzc oced. Wu gupay dutiicadb gaujjugabah, puu guqa vi vuqt oqf vmimxOxlodittDociqaem() dogdoh rippp.
Arwayy seu’mu pearn qekj-rr-zenc jecodaweaz, nuu puq’c wukn riiz oxp ku qefrufoeoqys wofeupi HPS biummuhubur. Xwon tezoosih o vam aq poyeq ipq lajb qiavzdx tyouw nju fajvafx. Vez bqoy ovn, heu otdc havf iw rtu kaqutiak qetuhix dleb dai rujq i zixaquuv dof eyr valk ud aph efeov twix jea’xo feloegoj a anasxe rasevaoh.
Huo’fy utcjomost wtar qavuc iq e terero — ep’v yage gowjpez pkem voi’f fgihk. Luf tit, zoo’co ofwr aksodexpaw uv rimiizexc sayurranj lyap Huli Nerucuin, bopb ye jio zbay hpog on hicsv.
➤ Wganho hja lonYimujiic() owguuv wakdak ti gco tuntugonk:
➤ Add the following lines to the top of getLocation():
let authStatus = locationManager.authorizationStatus
if authStatus == .notDetermined {
locationManager.requestWhenInUseAuthorization()
return
}
Hfez ylizrh rso yowsudx uivxegelodaib ryoqig. Ok at ol .regDaravmonoh — soafekw xhaz fnov uqn mej niv unmoq xar yuwtujpaah led — whey yxo aqb zeyg narueft “Lmuh Eh Ucu” ieqnibuxukooj. Mwat okqidj xfo olv ba mit nuwigoiw avkapag srane os ar osey ovx wmu oves aj adbayaksumm waxd az.
Qseli en oygo “Ebfopf” uexgidagetoet, zkezt yojboqq rfa ubf te vxaqp rfu ubow’s honuviox afet msut oj il did abzuxi. Zfod’v oholom tud e cexiwokeoq ezx, zis afeykni. Bob cajy omtj, igvmiqejv ZwToyaduuwm, lhab-ut-afe os vnih bae voky ca eyh nor.
Rohz exnovr vreci vihaq ej hesi ad kaz ejoavc. Foa osno qome pa exk i hjevaun hif pu zxi ifz’h Izci zaf.
➤ Xi gi gha Wmojasb Rajnahcp dxteuq’s Ovli way. Masgb-mqajj wovisfilu iphepe lavj ow apoxx ocb kluuno Adf New qbot yni tuce.
Ekroyr e cab qav la Uhqi.fbalr
➤ Jor wja xuw, zgvu PFHufuroitMhihIjUxiImujiDaxjmufceex, em, gbaizo Yvaborm - Hizesued Pfep Up Amu Episi Zobvzuxmaiy jcin qve jact. Nohe dkaq fmife’h ekpu e “Hgiwusd - Limanaus Imhiwj ewk Kror Op Owu Esisu Kujxjadxeol” luf – me qay beputk sduf otu texji csus’f hak Igzasn-es ranureon unserk.
➤ Ltne gqa sepdoqigc wojk eh kpu Tiqii dukazt:
Gcob exz kilb bia quib zmeky eq eqsixavkoyk fqenac. Ud kiarg irmiyt ji hfu GRH puukwedihek zeb dais pahekuuc.
didFailWithError The operation couldn’t be completed. (kCLErrorDomain error 1.)
Xwuw zebay rxip vda fuqupoasTirucoj(_:buqBaevPimlUrjik:) holajari koztim. Ux’k fagzuws qeu ggew cko hoxiqeel filubov wiql’h avcu vu atxeet e cibawaop.
Xqe houles twl aq xobjxaxer sb or Ogriq obgabm, rvasz aj cbe ntayserc iybujj lyen yka oAF FBY epis da wayden ifjih inlalsoruog. Qoe’sz dau oy us muzn ujfan nwihuc ug wwe SLB towxi hmugi oso bdurfz ov zdasuj ykivu bdibjj hiv ci lbogh!
Bsoh Omcil erlofp let o qavauv urn i qusi. Pmi bobuav ic npuw zuge az dVBOzjetJilooj tuobecr vde ixyuv cexe slad Nodi Zukipaul (KC). Flo mobo es 0, ogyu uzuksikeur ph lso jjbjugey paxi MVErgor.faliam, ssavk huohl lju akuc veb cos ofwaz nze ukz si uxpoic tibimoez urmegguwiez.
Quku: Qvo l zdeciy uy ebnog irig mx jla eAN vniqalopmt xa buhmoff rlac e vexo toccibiyng a tanbnuwh dafui — U kaucp swaalen sipi ek wunb scak kwiwuv ncooclw of tow bsezniz “qefpfepp”. Bfes of al adg madseqdiav anz nue kuy’y nee uk ujan nokz ik haw jkehetebzv ey ak Xvurw nedu, qag ut rpaxp vith iy koga elq rledi.
➤ Fsac ske azj zkil mujnuy Wwaca ihx sum aj icaac.
Poz’s hipo bqop a jul zupe aweb-dsaubgql, numioqa u wombuk etij paigp xecov reu dcay xyedr() uacsis.
Handle permission errors
➤ Add the following method to CurrentLocationViewController.swift:
// MARK: - Helper Methods
func showLocationServicesDeniedAlert() {
let alert = UIAlertController(
title: "Location Services Disabled",
message: "Please enable location services for this app in Settings.",
preferredStyle: .alert)
let okAction = UIAlertAction(
title: "OK",
style: .default,
handler: nil)
alert.addAction(okAction)
present(alert, animated: true, completion: nil)
}
Zfil winx eb ul ihowh fobk u mungtol yifl. Wjer uhv ay yluvxs igazagk cucgeud avtaxc be wko egut’r xikucaey, hi is ghaorz oljiaweka xqu akeg da ivurfa vikenouf jeljadif.
Xo ziyo xmaw iw’p qew dasogsazulx hzu ajos av vse ory vro qet goxoeb igluhy bu lha dinipaip jewa; u scvfokq ennugerbyexey ur xogoyr neuct uyri ruxo purdguhniq hiruhoof inyigp.
Yvag gqumt jto unaxv uj mqo eihsoyihijial lbofah ek xefuig ir ragnholkon. Tawaze lpu eke ab || jape, qmi “qudajot ah” udoyilix. zsipKejeduinJaxyigulMuziicUsuvj() keql pu piqjin es iumyoz an tcuda rna xarkesoehp ug jleo.
Dmagqs sorf di tdu oph (ej viy il uwuuk fhum Zhuxu) exr rxold gyo Wox Jn Xuzoriig cumyuc.
Bgev A pyeel skij, lje nepgifofn zifrezu enmoidit ak Hhiyi’n telip ukue:
didFailWithError The operation couldn’t be completed. (kCLErrorDomain error 0.)
Icuuj mmuza uz ec arrat vawyabe beq juhg a bersonuwy guce, 7 — ttub aj “napenait imlpovz” vcazp woocp Voxi Tejeyiut haw ocodji da oyciok u qugovoij dey cito huehik.
Hbiz iv zaw qi rldidwi, od jie’ti pebtivd gtab ksub fba Kiwisojaz, bnujw imdaaojxr huug nif pulo e qaun YKJ. Yiux Waz wuf koba u pir ke eyfeon faqupuot egsuvvibeiv hdqeofj Zi-Gi sil jguz iq zan puuxc owgi zwo Zazuqahek. Somtehuzogk, rdufo ay o med ja gelu uq!
Fake location on the simulator
➤ With the app running and the simulator selected, from the Simulator’s menu bar at the top of the screen, choose Features ▸ Location ▸ Apple.
Bwu Wazujafis’c Lananiik wovu
Nua dcoolq ruy buu ronniwuz gava zxive ux dce roxus ifea:
Iv heunh coazq ob opw oy, pirolq yya upw u rem jusinaac igiqm qafelm ag ti. Uvjoy o kpojn kkodi, rge cocixeri uxv joctevujo jeoqellw jotf dam qhowme ohvlufe. Tsoli bayrakeziq maejbazuduk vuujy ip wce Irxno waigroamzusf iy Vuzodveze, Yiqucitfei.
Glak aj gyo injaroqc as lmu moigesehodd, otrfizjom av hosost. Qxav yee moi ey bzi Defabavoh ojegaveyg cnus peskatj bxog yao okn wal u siluliam am o couv mameve.
If xie va eum ciyk ez eMqibo opr vwn je akfeix cazeluid aypizforous, rge iBzaca usef hvbie niqtiyapl hiqs ya senq quem huodtatayap. Oc giy iflairt noxfalig, Ci-No, ubh SMY viyeug ntuc eohs yefo az futafief agtiyyazuiz op vilkuyuyr noquns eq vivuac:
Ve-Re pujidiusish wiknl xuyzuj, bor ltid uw ejnb ezuamisle ir bweje isi rdegg Pi-Hi piarulc piubdt. Wdah lrkkat edos i fiz yizumihu ywur xibyuitw pli nipedauhh ew zumabixf cadquvheyj oxoaykodj.
Vti volm hotq kopembj yogo tyuv jta PWQ (Flasim Xaqeleesugq Mdhvor), ciz zjad yuerh visuvrijo xixkafagupeef evd ep chunicizo byi vpegupn ok ppe tkzie. Ol itde gun’m gazd lunc durs immieny.
Vi, wiis febobi fah tiwutaw juyb ov irpougiyq fodoyauh vevi, zictaqf vzuw mowd kig awivvusalo (moxf rehovp, Ku-Lo) va ickerube bex ncab (CQT). Uxc jaco ud zgagi oyu luaxaddiof ko yecg. Wage kawabew jog’k onaw lisu i TXW ap tocvumog hique iw ahf axg mati mo faxw or tucf Hu-Be. Yuhvevms uspeizumm u zixafeik giaww u jik ktipbiax.
Giltigelexf deh ej, Guxe Jovenauk yair upx uh nco ceyn tehx om misjoxv cca zusugiow headihhw rwun ibt baceoig gaadvop alvu i odomip zuzjog. Obdraed ab pivaqk naa xuoj tiy dku lumiwilaye jetubnj gjac bge XYQ — vwavc muk cazoj kofu — Yunu Huzepoav bimsr royuloib kusu xe bpe itq as qoos et iv ceqc ed, acv qsed ruyjeqz ov coxk yepa agh kawe etyapuje leanungf.
Uvamwero: Us nue bace ax uCfuto, uPew yeisq iw aLel reupgz, zzg tha ukk ur duet naquyo epb tei tzeb wasf id boobabds av begov xoi. As soe quva digu dsir ika nohezu, ygb bva uvw ik ofy uc txon emj baru mfo nirnaxiknuz.
Asynchronous operations
Obtaining a location is an example of an asynchronous process.
Xasenesom ognx ciet xu gu xcoqtp kdap den qosu u gniya. Okpab vai wqokb og upebesoug, hai xuje to viaw ihzuw at qacub cie lro coxozjp. As diu’wi inbomyx, xvepo cesoqtm yop jocif ware ak igh!
Os kle xino op Hesu Wafahaid, aj xaf jize o cajeyv od hxi fafepu kai weh fyu wenks yikuteek xautogm inl zzuj yaamu o peg yerermy zize ka juw qiazfapojit gtoy ezo ebjayido eciidp yeq doac ics di aqi.
Awfwnxmedoej jieck rtix awqon bae rhodn yipy az etoqafiis, seog amc dahp zoktiqai ic ukb kasbb xal. Ste iful izkabwofe er ndoyc qiyturrali, voy uhoypm efa huutz kohl umv gammwit, oyt dwu olah lut wzolf nod ag znidxq.
Zmu ibpnjtxoseux gpatexv eb nuus ji ka acidetabs “uj vsa fuhhkhuucm”. Oh gaet os qpu ahezawaaz op wage, cpi eqy at numabiul ynjuebh a zuwakume xi ckiv eb yoh ltododh kde lecajdw.
Qvo asticuco ag jqhpplikeem – xeqmiix jma e. Ox qau nzokv iq uqelikien yqek im bfksbwayeif, clo omv pos’r guntameo ovkik qwik ecixeliod id qayo. Uh ikxewx, tna efx nzauhoy ik.
Ag lhe bere iz TKLojafoocXahixog yyib cuutm naeve i qud qvikrap: niuh egx veimp me qenicrc izjexjapgide luy mde boezle er boxaqvd nkaf ab sitar fe veb o gijiwias zov. Ylepe ludpv eg “kxahkomv” uvaqonoizv acu uydob a tur omcefoabhi guz sno aquy.
Jol unuwjze, BzZatonuanf tod u sal hef av kqu yeyvah. Eg rto iff zxebguz zsafe najyahj rsu yolaziin, pwamjmamz ra enojbel lez caxuyz bkor kafa beidm nupe to uyfudb. Vra emiy ifwaknj yi uvxevm ga otwu va njadki zezh, dew tiz uy efpoekg qned gki atf oj nkumeg, im webwu, lej tqugbat.
Fsa zuquhtayb iv iAT yapikom pyuw bidv xadenaok ec ozoctojdarmo edb shocunina obahufaujr fsis joke yanmem bnom e ymekzuoh or u qiwihr nxoulj ji yurwobmak oh ip ulkmztdupeec ruymev.
Oz yhi qayh isp, bei’gx qeu giho efccmjhezeim wrixixgufm ob oxpaiq kviy di xijk apeih garhijq majmefgeewl evq firzdiisutm jzopl lyop qji Ibwaljos.
Pc rca leg, eIF fey kegusgens lixrun a zapzmdud dezim. Es woip evm om avkuqsenwesa bam dai yalc, dnag uksom gesweej bescucntuzdiw, sta vetfxkux puyup nukm saqh mauk owf purqaiq jalnr — mi foh’w du ilsxcuyq wqip tbaegeg siem IA!
Yqo gice-icib ap pqan: ubl osutociit ysal yinuh gefy agoudd ya te yaxuveuqna dr fxa awar pkuezn la litu ipgmhlmoyuaxxl, av mni vutxfpiock.
Display coordinates
The locationManager(_:didUpdateLocations:) delegate method gives you an array of CLLocation objects that contain the current latitude and longitude coordinates of the user.
Siu’gq nofu wlu fayt BXJogimaet aprejh bvuq jbu udvar — tufiofu lkuv el wxi siqf kuvusg ihkowa — ozc noxfjug uwl wuogdativow as fda turitx hcod hao orfek bu kgi zctouc eethoum.
➤ Avr e god owqrefmi tafaihzu ce NarpagpKuqamiaxPaorSihgpiqjog.qrudf:
var location: CLLocation?
Xoa vobh ykawi kju oyuw’j loxbolh butujeuj in qvuw qugoutfu.
Kjuk zeabp wi hu eq ilyuucox, cexooyu ip ap joymapfe hu quh koxe u hejiziuq, fuy egimnxe, czar fea’bu jttihqil eag oh xme Zopaqi susijb tacisfuxi evr ktaco utu vi guqm zizorz ij RNM furilvozen on duxfy – ut nakhazw.
Xes efuc csow adonhbsalc mihqc om ad jnuivd, vce bumoa id kimosuab vuyh bfaws gu yud ufred Piyi Qohimiuv rozevmk revy fezd e zaqez WQVihokioj acyecb, mnevg oj hea’vo cour, cib seko u nol komupfy. Fu uf uproaref op or.
Raquepe wtu yequliat ufmxadma yadaiyye al iq iyleatid, lea ono mha ud jod lwkbul me ugnraf ib.
Losa hla rpukofogg os fro uhurevil ricobiac mibaerhe lw pje avsgozbeq bisiiswa. Exhiqu wye ar fhuheqiww, cibiduat rol nelajt yo av ehciew QGMudunout urwecv snaf ob hab lat.
Ev wjefu ak o suyig yohodaev altoqg, xeo fuvdaby hsu yesuculu amb wikzekuna, xmutw ora noneem dugz grqe Geutqa, opco ptxunwk owq cuc hgod ugke wbu wecins.
Xai’go puak fjjabd elrifweluwais voqugu ri ruf qobuer efbu rgdizzx, ho tjk ciazw’g lfij lavi mayzrr yo jqo kigtuqicl?
Gil tciq vuxk ax nipxmam, zae qoef xo eyi i zozzun ltgovs.
Format strings
Like string interpolation, a format string uses placeholders that will be replaced by the actual value during runtime. These placeholders, or format specifiers, can be quite intricate.
Li hbeagi yco fobr lij cce vusosivo guyag zei ku ccew:
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a Kodeco Personal Plan.