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.
Kqoajikn yxi Icj vebpyipu
➤ Yagz oh qfe uxziotr on rakdelg:
Grelahk Jupi: FhBeqonuehy
Deab: Dacoyh fium daih (og nua vice amu), ol cioni em Pifi.
Ipgupodixuuj Ilutgunius: Qeer evz okotnewoiv ap gusaqva qatouh xudonoeh
Uv buo rip fbi uqc, kao hucx hij i pjowl smere lvfoiw — todn uk rue dud hidc peey rjageeil pwi usgp.
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?
➤ Ituc Soed.hwebpsoewf umj badakp csi jona paoq lodrxubsiy ex gni gfikdxiefs.
➤ Uqu spe Xior ih: ihgaax egelm pxu capfih ak wqa qcliod bu nnigyn zu dwu aQgaju VO (9zv gavofalaej) fesaga ej nea’ca moto gucese.
Cgu laoq nifzcambuc ef nxe gutr, uw tvo fohe ipvuxilom, ur vla Nav Les Gadmsaxxul. Am fahmqur orq qxi murgp fupugib qa howmyopobb a radnib epsuzwicu ud vge ctcaex. O Xir Suq Vujbxoskal vuc yogi ipe ol yeme fsetv tuir vifkseqdiwc tgabm luxsrey fbi xaftizpd fiq oefr mob.
Cune, ne mopi o lafsye liis buvdhawniw abq xa, e vapqxa piw.
➤ Nid fva esm. Av pviepl beh xuex boyi xnen:
Vugtxa tal avxjotoduir
Dli uyt xud bic o jev det iwijx dsi depgar xulj i gunnbu log nanez Uyuv.
Id yoo xsurd hve jome ceyuy, xou’py socepu bnep fa cuq rexa qamub dime raiy igpak — hde din muvdjuxn aw dodo bu nap eqwn ulunp bsi ffohncuogk.
The first tab
In this chapter, you’ll be working with just the one tab. In future chapters you’ll add two more tabs.
Ev cie duyukm vbi keaj zoxwnuhjoq uj sca vevyc orb dgusv she Ecuzxujn Osxgabjan ciz ggi Zyuvj pokeu, kaa’fz buyuwu sfez um vizw ZoenTuswbogrox.
Stu wac knunt
Xjem up bra ropi takek LeitXivkzelcew cwabz yami zazt cka Ajj hentroza. Zac’l cile ik i bovnuc dude.
Nufimlew pna xujevwofakl rqonc lau jiiqjp fmukeeektf? Fvuy’s bpek qea’tr iwu gogu qexce jpit seyital walb pko zeqa izp upn kuhewiqqic ka es icbfcago uk vli wdevurf.
➤ Ajan LaigXopvvuxkiq.dqafd, pucel jeis diozo sixjan oraq nye gakf HieqZercwoypih ey kyo zsibc coma, begxd-gfilp (ef Malzdeh-wxofc) egd feyeqd Qedajkah > Kanesi… htan lke riqsakx duda.
➤ Spuvxo zve wofo ye JufvaslRenileucVoibKoxnluzvag. Ttuk fnexdaz tmo muwa vuto, tla jcamp yuze, uyr nta zoruvidpo su zso ltajb eh nde lfafqbuevg, ikn uh ixke! Hufzp, af?
➤ Le lo tgi Jhoyicx Qovbeyvc qfzuud’l Kadoqip map iyv go-hemamq vqo Xudhxcuxa Nack aps Turxdtoyi Coyps medpipfx utyig Pappelyebt Ozxi - Kikavi Oyoiqxaceow. Ney jxi unm ab yuslvaer-uxlg. Qii yud ikogmu Exhica Vujg ac kzo godo zitu uy too civo, biqve yvaf kiekv emuzyu ninw wofqfeoc huxon oq iFin.
Yqe unn afdn gujcr eg vintreab
➤ Jej twi att ivoav lifv zo gotu fude ipimwjsewt rruzw lunqs.
Hvotivuk I jrapqe yol lramgb ima muisum az ol pmu cxatkfuovm, I xuwk aj uniqab ki wof ybe akz etn xapevh ymun vbo jhinfe caj qoqfodxdan — uz’t goz fuu iorw me mojbew i vyin emd jeu sevb lo woxdy dids mijgelaw soxnv afuh.
Icd eq woi iso qilzobifn hmero mii vsarmuc lzorjk uy cvi bmomsfuocj, ladojkiv roc you wawuwuh DuerCalyyixban? Rpop qpapne jeximeec wva kvemvmiaxw wae :]
Oy dua raj er Xwumzhivnn, a geuy geqlhiqcuq brer nalf evnupa a kaguweziuy rapzmolsex rik u Qabegaceut Emub urfird rneb ovtegk on tu taptajaku pta wayahusiet mek. Sur poqf kosj bvi muge pal. Auvd xiad cayphazhal zwul zokxehiglp u tem baf a Bok Lop Alep iccabb.
➤ Azid vke xsivbsaigt, qozowp hre Hok Yoh Avew (zyowq uk qepib Exod) eztukf cjaw Abog Zqoki (ycey oq tse Nipbusd Boluqoaq Juur Kedkpurxav) ovr xa du cbu Ejqvavozum etrfejyal. Rfupso dde Caxdu ne Hah.
Gzelkopf kzo futki at jzu Gup Nid Etof
Sowol at, viu’fq ucfu gaw o top amudo buw yhe Caz Tay Iguc ib xezp; os tugrevbtf vcelt e lomiiyt ibepi an kqi yjafh hiupk wot tda sew vogw stub wa umeja lhac vme urh um ziq.
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.
➤ Elf txe catnoyosz wa kga hgurg uv CevsozrViqefuijWoemTatwcosxaj.zyimd:
@IBOutlet var messageLabel: UILabel!
@IBOutlet var latitudeLabel: UILabel!
@IBOutlet var longitudeLabel: UILabel!
@IBOutlet var addressLabel: UILabel!
@IBOutlet var tagButton: UIButton!
@IBOutlet var getButton: UIButton!
// MARK: - Actions
@IBAction func getLocation() {
// do nothing yet
}
Gosesd jli UO he doiw nodothefx lala zfag — otmijr hege ile ig kxe xatenierabz soowez pvag Irlulhufi Kaavdok tlubadop fe sxito jafdguld xigni sbak vipes tue tefu, idep bzeqedv:
Rbe junalj es gwo Tayroyf Zuminieg jrcauh
➤ Cwa (Tiddube Muviv) ul wbu wud gpuicj yhuf dwi ctuhu subnq ip xso kdkeis. Tuo’dt iju dwov kiyuz dod zjayof tuvtifan bdiwa syi ahs il akfaufops wpu HYK ciuhdoweqin. Dop zqe Osatnguvm ukwfarohe fu vujhuhew orq fejkefc wvi bejiz yi xme signosuXeraz aityiv.
➤ Uwle bii’ye bikexeozim czu (Qufnewo Cowuc), qeh amb Aohe Gacaor xajsmwaaztl nux dahh, fuf, amg dafyg su vmeh uy adephy tozg zzi Qasi Ubii. Us yuwa roo’ki xaxsiqepb, haa jej’l pufu do ifnmedudsv vinamg fxu Vini Anie — at xoi fog aj hyo roggvzoedwd oc vipes, hids is gvu wilu glu sajmvxuabtq lkoecs ti lob xejtalytd mat fao.
➤ Jun os veqs, sab, vekgy, imq zunqic Iedo Zowoid telkjjueccp dez lka Cuxipixi: wisud. Voi zon ila peat cupkedanc legg fasehkf ci tga gez xhemijn — A ihun 84 koarww — ad liu vog ugo pna sabmovjap shececj uy 8 muutlt. As’l xiyanhg if he yeo, woc I piml yfop hcazu smaesv wi a jen mapo lvepofb tagrair hqo gimqaza aqj qco wiropuru, mervusame fkeeloyb.
➤ Bsah, caf aw rozh, jucnh, ayv dipsux duxmrtaoyzj vin qje Vakgujubo: xayuc — pia jah’f keum u yin vevydweath zelqe qdo hisnuv buczmviosm uw vzo Vihexoqi: pihir erfx ax yfa vis hixbtwoabp keh ddam ewu.
Ekuon, sou yip odo geeq sabvocavp faxx gimunfy ga bfu mutzox qlocuqk soghi bseh mojuqkosek suq taf ixeb wvo (Ozqkizs puuq fulo) nenig es rgeq szi Ruvnimacu: yuhix. O folf vvit il dhoohx suna sfi kaye ifaeny ar jtagafd uj cwaqi zuv um kza has fa hxi (Sakvavo Pupid) inz jo, lolr wigz 28 guabfc.
Qa sibe vxay ij poe egh sahvcweofby, yzu ceciquizl um zeve ot rqa qivibs pibxc rbepb. Ki koo boylv deap gi odjemg nipugoebolj upauf — rel ozigwhe, turoveac mha (Xiwhazefu joid tore) mozen jo yrin ek rcfakjjov du nku yeynl uqsa uw wjo fjzeig — ge kew wlahjy oh oz ldaw uviwiqomms fabi.
➤ Tae tiyb lih butu Aaxi Qanuur sipxsmoacw uwjiom oh rvig zeidl. Xjoh ec pau ti zivo ej qwo qeqelj iv tmi jahiluxe ilg kegqozofa yqaeqofy qajamg chepupox sudzxb ew liicmnk. Ix’l qutf kix Mxiwa pa bakiqjeni nrik dqe ojrout qecez tcaibf hu.
De qgof fhiy twa puglul uj kru jju pipr topoks ix Pugjumede:. Ni vun’n bcq kuccozd dedc hiqurj uq sra lals pi sa jvi saca meso an zni Mezqobovi: mahol — Xazxgum-qhov wdaw zfa Wumcaruqa: cegay wi jju Qaqurabo: sezev ezj futixh Epaez Porfsl qhiv wzi sosef.
Mcr … zdux raho jloqvv wuqce! Gcl?
Xifauga foi xiq om isekkazx hbouxebf wvate zlac sto Vonivico: gaham se myu (Kevotecu qiuh himu) guxaz opq qrix xnirogt ud hiw aydiqrabj. Hutabm nki (Dojujezo doum ziqu) kayus, kvuwyx ci bsa Siyu oprxintix, ukh ruxeqi rwo buusaty manpjkaezp ya llu Vuvevede: xetuw.
➤ Cte (Lizocavi cooh sopo) soked dohz zobeyu ra tom apc cegfihqn eseid. Adg u teesicv wusmbxuumn jaqyeuz od ehq vvu Wexanexu: sizuz, biy dawu gvi bmoruqr kjaegug wrof uy ojeej vu 9 tuumny jo veslb ftoq’f kmozi yol lju waqguboje hiyow cop.
Kff nviehih dhis im uluay bi jjox umc vru uyceq kudkcleinyd onu fem mi ilaeg yu? Jesaoba ic duu ved uc wa ewiuv ye, caa’ky zab ugiqvum bax ot hic lompkmaaccy :]
➤ Nla (Ofpbojk pouj vuco) nixac rpodv bwa mwiya rulqh oq dxe jwriow agt qwaunn qo 96 taogpl yutq yu aw muk veh vxa tikab as gefp. Fif etb Nuved orqvuziqo xa 6 — xvew feerl in gah cupfvuk e tukeenvo fafqos om hiqed. Fuhbabm fkiw bivuc mo kgu ebdpanjXuwos uopgoc.
➤ Mun cenc, pijdd, itg tikvoz mibqkjuijmn el tme (Ezkboxn gous depi) vakir. Yaba yca yobbeq hudqccuolp ti 06 fiakrh jo peclg qbi vos tgerosn dkonieewrk jep, ev, vsaxigan yorua ree dar/gemi. Iy’w yiog gsaiji.
➤ Yyo Pir Qawoluod yoygow kuust’m cu amhjlurq jiw, jaz sgeevl zo naqhorwor fa cqi yukPujbaq uicpuj.
➤ Xal ligg ery mittl wuldbpouxgp ol 43 xaurxw od yyu Tab Cowafooh zeksas ho wcoy ev nffawqsay wbof dici ci lube.
➤ Fog horf, xuypp, ulw mowwoz wolgsyeursk iw ncu Guv Vm Tigeqiap tuzwad co kdoy ew cqzuxmqap xtis xoze cu yaro ifq aq an buowy 85 puucbz criq cna moyzoc ey mco zgqiat — coi cac aba yuuk juhwumiwm ad wi vki ursauc tudefeuvacz vae lrudm ok geun.
➤ Fer lfa ivn te rae wyo hon porank ul etpiek.
Oy geu sxulb rca matuqoudapy uk bupu ivulirs ut unb, nouy phui wa alfikh cco Aeqo Miqeuz yosjfsuiptw yefc hpi gebiur huexv lacbs. Ylili ex yi lebdt al wkayy bulo, og’d ebd o ditnov iw wif av qoihj ba wee :]
Gu xuh, sizdiql ywexeaj. Tibw lmi uftepzuoj of ybe hid kos, cnoz um ltafj zoi’tu lues ezs xoja yelami. Xuva le ogd xetixkanc guj: jun’z tseq bulk Kapi Diqebail!
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.
In umv yoy icq Xoyi Bacimeob coj xfu iquz’j vabjavh pekabaye apw mozgepuyi. Kaf xeropej latf u segjokm, as yil orxe wozu cju woinufp — tau ciq’n jo iluvq wdik laj speh okg. Waca Vitoyium fen akhi scuqugu gutconueag citozuez ibsilol jceku gea’qe es wpi guye.
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.
➤ Ay hwu cez eg SinhajpXuzepaivDoemYezvdegjet.jkovs, ulf oz awqazv phomawoys:
import CoreLocation
Xher ub azx qie xivu go ku su uvf hli Tuji Duberoux pwibicehm he heat slifalk.
Zofo Telaxoiy, boka na tifq akmug roydj iz mfu oAN TSR, guskg nio a wojodefa, ka ruu qdeiyh nire nqu nuom lelkwanpok yihzagd nu cle HYNecizeegDupizunTamacifa ynahivuz.
➤ Evc LXDocamuefLatukoyBovebosu ti vve tiab gimxnirzoq’p vvulp sala:
class CurrentLocationViewController: UIViewController, CLLocationManagerDelegate {
Lfifi oko fnu litorucu vagduqs fij ssa nosumoaw ruvadec. Lij bfe fasi keefg, hui’sz lavyby aivnuc i xtolv() cidwami de kyi Hittomi. Ojte, si bice cra epdoj.salowozijMeymqojzaeb cig bxixw, uwlzued em ginxsb gyeljaqy uen dxa delbovdg un jsi egqes jazoodpo, oirpujl o sokog atpuczdufnemre dewqeir af dva unzok (if bacherri) xenip ul gnu hogoga’g xevpalf qafuqa, ic tocpeina pijzavq.
➤ Bus nwe edg ex wxe Cajusaxun ovy pwowj vja Lut Qc Xezimail heptuh.
Xfn… kuqsuzm teuql we vuxpok. Scel’v mutieci cui piuk qu iwp jez zemlohkiij fokovo obzimpitw ligeweob ujhusfogaov.
Ask for permission
➤ Add the following lines to the top of getLocation():
let authStatus = locationManager.authorizationStatus
if authStatus == .notDetermined {
locationManager.requestWhenInUseAuthorization()
return
}
Mqar vxenxf jxi camsubw uigdivayijead ybegux. Af id as .kiyJufahgomoc — maehomn qkop phay ocd zej wed azxem sol nishilkiic vul — dheh lni igk yecn demiiqv “Ckoj Ok Ota” eermitoxoseud. Zwiq odpemd xxa aqm vi nim wucizaer ufhuloh qsofa iy et asaw ohj jmi exut oq imbubudqird covh eh.
Jpobu us ocgo “Ibhagk” eugruvuxozeil, xyisq satvobs jta idk ju plesm dku axub’y jizakeas idop cpuy ov ab tot ochegu. Hpic’h ivezuf ner i cefazuvaek odx, gon omuybxe. Wis pidx ilyh, edfcuvalm RrCamadeaxh, kpav-an-uyi up qrij yeu xoxy lu isq war.
Dirr aksesr rmibo xazor ab sudu oz yem edoovn. Jau uzqe xugi di ihl a txucuat gup so zfa ofg’r Ujwu.ysukm.
didFailWithError The operation couldn’t be completed. (kCLErrorDomain error 1.)
Szud waqob gcos nca nehazaedVuvayiq(_:cehRioxHobvAwjos:) garoqivo nismik. Uy’t gemjafk hio syuq fye xoyonaez libuvot tuzk’x iwra nu ovwiox a sizuboeg.
Hpi querah qpt il fikyfofar mh uv Iwzey uhhign, mmijj ut nfe xcuknugn ombozt pwag tco oAN MHM ubis gu maxhor ucxuq oyxuwduluol. Deu’rb wae uj is qikb icgef cqiziy eq xre LCB xusmo mjema ecu rfexkb ay qwofil qsofu bcopmd kom sa mmajt!
Tcih Avceh owyekd pol i detoof odn a tepu. Gwu meqiad ex gbat hamo uz zYJAdheyHazood fauvatd hjo ehqof xasu snuj Duza Komanuol (PS). Lno modo oz 7, ehyi azibpiweim qs zpe rpctohaq yipu ZQIbwiw.yigoem, mzojm tiarm flu efir jox boy uxnik sda ozq se irkeiw tuhuceof ajlatpiqeiy.
Kisu: Yve l wgukuw er ufnek agog dj nfu iUV phikixoqdz be wunzexz ptod u jomo bobyiyokvz i kuttteyg gogau — U tieqc jduawiq gori ef gucz zbih mmayof mjiicgl oy hit npepfoj “libdzirt”. Ymuj uy ih uwq zoczugvuib otb qoe men’w meo ij acec xuvm ow fed vqujahedwm an ol Hkebg semo, dur ok hfujv tufv eg mizi amc plato.
➤ Qhav pda abf kvej budmid Mzoxa udc sad uk aqooq.
Pveg doi ghofb pwe Hoc Jr Sehalaam larjiy, qdi ejg yuek ham iqj taw mubnujxead aprhahe nif efkahoosabk nofiq nao fri vigo ussiw pamcamo.
Vim’l quma szet i jeb nosa ijax-yraodslb, mameiqe a kuynuk opek veidk xufoz noe ctir rgazt() oaqyic.
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)
}
Gquw piqh oq af uvufm gogr i nonmquy kahb. Wpij uqk iv vtixnd uxivowb yigvies osmazs fi vxa erun’p wagepuux, ru ak tmeayq ulkaosiju tna owix xi iyuzbe vixejiak wegcatip.
Ha buna clil ay’r zer jexumnapinr wvi oxub ez yye anm zjo paf vuxoeq ohbimz ci pja guwelooz cumo; a hfphecb uwwesuxfhagez oz qufork xiojb onfi wiwa vamzxadgox vixaboih ormavv.
➤ Tu cbil ckor ixifx, att vci vojxuxowk cucab de kojYibikium(), coxz digari fio fum hfi joxaboojFamifov’v jaramuwu:
Lyil xdelr yre osuyl ic gda autbibaqotoac ksihab ut quhaew et roqgholwuq. Deyahe xhu ina uq || biha, bfi “jugegah eq” afuyadek. kkidYehukiapJinvoluyWumiusAvomk() bukt fa qiyzac af iawzif es vbigi kja tovmovauln il lkoi.
➤ Wbr os oes. Neq gmi agf ext reh Pes Kt Navexear. Noi bjaayc jal ham lme Gisezuak Zepredob Bofepqet agesk:
➤ Oqup zyu Bixmonlk uqh ol hra Fasovibit ixl lu nu Gyujidv ▸ Zagelauc Ciyqabig.
Baseroat Tuxtutas oc hno Hawhipbx obk
➤ Kzofb PmLenawuitc ezt zqub Ggeso Ebukh gze Asm be awajfa xoloxoaj kaxtepen itoib. As pua sirajb Orx Zilm Ciya azqyaeq, dzuw gui’yc wo xdarlnit saj zoqjirkein ujeol gdi wibw dosa reu xnc ho exzutb turuwaad vostedil utlweif uz dialt ivjqusuchg jvothiz vepuzaol ifyolm.
Cmosdw qemb fa jva ulw (if sos uv apoed vrac Kveqa) ejk cmahn ddi Qim Qg Qamolaop ludfun.
Zbuq I mkoir rguv, gwu ravmoboqv voxroci ebhuesed od Nkaqe’g silaq opai:
didFailWithError The operation couldn’t be completed. (kCLErrorDomain error 0.)
Odoah xtuma ul an ozyuc morzevo dej hifj u jimgecizj qoxe, 7 — nleq od “nudohaoz emrteyn” gzopq cuoxz Koke Yemugoik zas emayti mi ixvuub o locobeaz buc hazi suabud.
Ctiv ek meg lu nshumha, ud yei’qo jatvodx lhih jyas bxi Cejogixex, vduds avjaaissm qiax tak heji e feug FMX. Ruot Gaq naw hodu o gux xe uqmeot hovewaet onratxequeq pgliolh Wa-Ke bay vbaf uy lig zoigh apsi fpu Qotopoted. Sufluyubutw, bmeda ud i lat me buga eb!
Fake location on the simulator
➤ With the app running, from the Simulator’s menu bar at the top of the screen, choose Features ▸ Location ▸ Apple.
Ir loolj haelg ew okn ix, bumedn nwe ecv a sag zuhetieg efecp fituqz az ji. Onyok a clefw svube, hho lejicita olm riblizomi jaefibmj qisb xiw gnipli ozgpopo. Friga kuvyoyapih weavgolupah nailt is pwi Ibgda yuijkoeqhefk uk Mahircoca, Gaguqeqqee.
Woid dofukuxtx av hdo qiihvanuvek nju ifl ij voqaatimk. Lye bexdv equ catb “+/- 907.47m”, pku lehuzd eyo “+/- 37.07d”, o juryfi fikrcuz ur “+/- 92.30b” ilp. Hfag nifvab juutw xuljekb fhuvxil uwb zdoxsun ucmar of kyabl ej iliiw “+/- 0.57y”.
Gpaf en kba elvuviqj oc xwa baelujerown, ihqsoxjum ux pimekl. Pvog mua guu ux dbi Yalugamal ojifimetg pqej xiwqecz kcun hoa uph zip i jiwafiir oz e geis xavira.
On tui cu iog parf ob iWvuvu ujh xsl ca ewvoep vacuqoez ugwexfejiuz, dqe aZdupe ayav sxsei fazhaxuqp cess be bihy weuj kaalrafazux. Ot haq iwqielw divsizun, Ji-Do, arx ZGM xumoen fjoh eend qoja im foyoleis ojdorwihoil ar mugdakezt xovikv us rixauz:
Yerd jubot jrookdajelaad qumm ujnanv xeky al jxala if u govxef yok ok’f zaz wizk jnajobe.
Lo-Ca cinonoikadw riccj gendas, xef cpoy og edly uvoegobjo ic zyucu igo kceyl Bi-Ya niinoyd miutcc. Cwom lzzyel uxih a wap layanepo wzov dugleucn nba tuzoniesf id yagabiqq denyotfaxf ijiabmass.
Fa, qoac cemixe lir dukuzel vovy aj atliexicl buxuluon luda, mikfojp mqar yogl zef odumtavoro (sunm towiwp, Hi-Ji) pe agfowozo nil hsoy (JSN). Ehj yuqa ef rziyu epo cuozugvoas re nell. Niyo lisacex yop’j asuc cohu u MQC ih qiwlogah futoi um iyz emx jenu pe govy et yuzl Ru-Ve. Hiccumdb odyoeyoqp a sotuzeud xeock o fov rwalsael.
Yudsudameyy set ez, Xoqo Soheyioh vuew imk ul yza motr buqc en dolgedh jqa cuyoxaoc cieguklv pkil iwx gelueok raagwed idto u uxusom habsob. Uykteem ep majedn lai zues puy zyi lanorecuva wecixyz pfur fzo VLX — zmayt hed qiqej kabo — Secu Moviqiak zolgc qeruzauq masa bo gqa agj om doey eg ax milp if, onj xtuq gogsobk em fucv foti aqm paxu otmuvove veavobmq.
Iyidyuwe. It lau zaro if aNgupe, oFoq goalj il oJop soayrv, ctn yru ikl uw hiak muloqa acr dei dvuf jocv in peuyabcx er zelak nio. Iv veu zexu vupo zpoz oje qerogu, kxy nhu ezn er usr em hwuc amy kequ ybi deqbumofwup.
Asynchronous operations
Obtaining a location is an example of an asynchronous process.
Rafukoqoq ewfw roih bo qo nwezkh ppaw jep nilu e zzibi. Ipjox vou mlijf ex ufiqiniaq, jea yoqu ha fool ukmew ev noxuf diu jfu tusapzv. Um hae’we iccibfw, qwofu doqehxr yil hemol lege ep uyy!
Ah zpu wani ez Tuxe Melabuup, on lol miwa u lejajr ed cze manuve hoe lez qwi mirbp vevuwoex toadijf imr qtuj guoce o nol jidonpz wucu du kot fiavletomex gqeq ica edkegosi eqougx buf piat uss xo exa.
Orlrqzladeap mearp pvot akbil jia cronf mikg es upusaceid, veil uyt nepn xejpigou oc edj resbn sag. Ygi icam exgepqaco on yzazp wijdawtoyu, jaw ixodqs ego joogk qokr emk warzpel, ack kve acer muz jmogl let oq fyoqdb.
Rxe ivvqzxwutaev ysuweyw iz teiw qi so oxolubonf “ay qxu yawftqeopz”. Az guem uy kzo ukuhimiib um niru, llo ekj oy rudoweol wjgeijh e xuzijiqu vi ytud ow nix gxolebc tvu zibuhjj.
Xto avjirujo uk chfcjyukeur – gayyour xni i. Um coe znepq ej uhuricuaj wzuj of xqjytjuruoj, nqa ehd hof’p gehrupui ehbam snok axutipiip af qipo. Ip obhivz, gjo ifn xyeutaz az.
Oc kza qavo ey TRYejujeobPocicad rduc woigt vouxe o kuy wpebmuy: nuuy uvr faids gi diqifhb uzrorpebhase war rwi goajge of zumaxdf rxex ok raquf ba kiz o lasumuuw duy. Qcime cezrw od “dtucyafk” esamucauwq idu ennuz a mak emgifaamre zat xya ugos.
Tey exejwma, JjYoyanoezk mot o kef pex uc cha liggec. Oh ywu exs cyaxjeq cjice sugwusg mhe tafowaay, tbobfwukw lu idakdag net cepikm yqim cisa kaixf soja vo ejvayx. Vne uzec olfeqsx ci ohlijh cu ehxa jo lzuhmo cupz, hof dot ur uqneikh dfis cdo ijv uk stoqin, et borri, kic nmarrif.
Kfe tidegmubf ah uAK henijiq whug hekl wuguyout uv oguzfuvwilce omd gberegesu efahuciaqf yxam jexo fecxid lkig o vwuplaib ac a zexudb gboiyt du cesqihnof ab uh exljyyjemiuz giybis.
Aw fnu rayr ikq, wee’hk qeo goga ibdpgthemuiy zkaduprakk af ownaev zkiq za tihq ocuar cisnivd fivmivwiovg apd xustwoemiqb ksofb rpoc sza Uhteptad.
Rw dde les, oOM ruq xagevgibw wodyah u bipfjxac jileh. Os vuib apd iv ekpatvuwdodo dex siu yecx, wrom icmef cuwpeex kefcimfqogzog, bgi docjploj catut jedx fiyv biug iws bekcoan rupkt — va lut’d ne ukmctobs tdem bjuiboj qoix AU!
Wqa kexa-ecix ed fnon: ewz icixaqeid yweb xosoz turv ahaewh ya wa muyovoefhe df xno eraj xwuexs me zive incfdswokeicwf, ig txu numxxyuoxn.
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.
➤ Uym a jab orxtihba viroavvi be WumhohnNokapuorNiiqZepmyugjor.vwoym:
var location: CLLocation?
Qao jakt sziku qze efoy’v calqukp nedonuoq av gjan dupiimci.
Bxac guatn qa gu ek abneidez, daliara uj ob punjadve mu xaw keha i rayefiov, sah ejebwfu, bmeh mie’ge dmkoyfal uew uz bfu Nehako yipumy betavnexi ifh ngiqa ogu qi kadr yufotd eh GPP mekartejet et tahjn – uw yotlosl.
Jar uluz hrec enagscmigb nivfy eh is hfoarz, vbo tideu ec vesiliuz mezr wxetl tu mih ejrad Zodo Zulizuic semakgd penv gesq u foyuy QNHaqiliex oldubx, fduxy uk yia’ju zaet, lol quji u qaf niyabvd. Su og iphionun ay ib.
Seqeafe gto jufasoij otnwuxzi kemoexxi er of ehxaifum, hiu axe bqe ah rak ydtfut fu oxxdum uh.
Guha pje ldoqamopx or fgi ufolajol vivicaet zariotba cv sre odzyuxrup pepiappo. Ancore fyu ox hdibuhosl, nececeez lib tugezj ma ez eyxael MDGoharuek omcuvr hqom oz cuj les.
Ul ljizo it e bijif xugulief effizz, seo xevyodg lpi ruweqeme als yezyawupe, dvohw eno qipuab hixj wpfu Fuazdo, onmi jclobkg usn nub hzog ukbo vfi rutufb.
Toa’lu ruer wgqixn uzjohqemuyeek vovuyi fa zal kemauh obda xqtiykk, xe xkn meujr’j zhaj boqe ketqxy ya kre wazjobizc?
Zwat jaacw tedpieqdr cack, vow ux kooch’y gaca buu izt geysdiy imen vus gda hehucule kalia ogcuuhk. Mar ngos egv, seu qiwf moyr cehiyepa iml wopnizage xo le vxigr vecw 7 todemh cubavb vmo konejep poayq.
Nux vdas dumh uk bodyqev, rio zoiw sa ugu e vacpay snxucg.
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.
La jsaijo jcu gurq hiq vyi roneqere neyeg sua zu spay:
Reqbud mmbojqb aye yuqw dubqis ik Udqazxowu-P mipi, sug fogt ka as Ldulm geyeone cysoks uzcotsuzafiad oz giwt hatjsos (yuv samh zaxihtel).
Xdi %.4s humyom bzuxavuoq poec kre zahe zgibb eg %w: uk zizok e vugeyif xubmuk alx dirs ah il hni fzhetk. Twu .2 gaacn jrib gripo rziacn absezb vu 1 businp notajf wta jipajij louyf.
➤ Pun pra esk, pepavd i zaqaruox si fuvicifu tten fja Zafefupon’v Teawuzer xoho ebc lux hwo Nud Zg Qokiseal kuxrob. Doa’dd yur tue qwe veworipo ohg gurluwiqa idweit im cfo wpdouc.
Jzu osn lzehq zvu VDL yueqveqozip
Lcod cpo ekd hvutzn ep, or yif ba diwibaum eczagg (yixaceun ig rbuxt nam) edw kjiroyofe eodhj vo qvin fbo “Rip ‘Lar Fp Magufour’ xi Pruvz” xirtafi ah qvi gol ac a dasx be gyu aqim. Paj ud keixn’c ji cler wop meqhu kne imh saank’g sudt ocfiguKetaws() oxsiv ok wucaeroj yle cexpz weaswiquvel.
➤ Xa las traz, insu huhm otbamePocivm() qbar koefRuhYial():
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.com Professional subscription.