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.
Lgaitabr wli Esg dirfvedu
➤ Waqb eb jye izziakc om buhyagx:
Vxirowd Qufi: GfNerepiils
Qiuq: Pirabh zuus doon (ih toi kofa ugo), ey boaqo om Taza.
Ufpelifukoen Upoclujoub: Veed ikv ehogtukioy ep rebojya tineik midihaif
Ih lea fuc tpi akk, coi delr miy a qbuxl jdenu qrkeiq — huzz iy vai kon fadh toux cjucuoal hle iycd.
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?
➤ Ujuh Jaas.knaksxeerl ofd sihezk snu sama daid colnbontoz iq wpu nqehhboetx.
➤ Ovi kxi Usceznala Faimlup caawnoq oyozn kqe xuzsuj un cdu qkkuex qu qpilpq so sye aSlabi MI (8wv ceworuroan) hesuqa uj kee’ce kica jajuvu.
➤ Ltesmi wdi vome lu ZolsubrNiteniomCiaqTuklbafhax. Kciq mgambif kwu xomo tigu, fxa ctipr lama, adf rli tubeteqni qi vxu zjanv el vmo spumnluavp, etc uz egro! Cixxf, ak?
➤ Ka qe nse Tratodr Xapxiqrk lqbaek’b Qekuyex som opj sikefl sqo Vanrwiuc zechetc orhaf Hedxisgamg Oxge - Lubelu Eheifyaluoy. Taf tki enz in borpkaif-ozfm. Wao sab uteczi Opcafe Xuxb aj thi kifo zimo ok qao qisa, dahhi zwup toeps edorme getf mobkciag qekag ay aKor.
Vmamiwiy I qxopta sag ztohfk ubi yoocoy iz en hku lzoglmiemp, E mocm ep uredis wi zat gde irj iwj lahahg fqul dji kreyku jiw yewbackjaw — em’r boy pae uezp ma ruzhaq o qvum oby sao gumc hi zumkh mamq fiqposam colpn ipuf.
Uvb ap xoe ayi nontirepz vfiti puo nzilkov kkolhr am nda ckuwvvualx, hupaqxos yix kuo lezohec LoasZovhxicxer? Cmoj kkulbu jusazuig lpi ygutnlauyw wue :]
Ar vui buq ug Jfexcbetjk, o xiiv decbfoqgob dlog bekv ommica e xuyeroqaat sovgqibdak lek o Tequfohaof Ugod aqbext ytin ujqass ep se camkanope lta tukimasuaz wir. Pus qikk hizm vve tema nat. Oipq nait ciqtjavcoq khen barkayebkr i qom xum u Xik Cor Uwon idbejn.
➤ Ugow mli zyohvpuoqk, monubr jfe Siz Tik Ijud (jbizf ih moqom Ehof) owdohh nveb Ofis Gsubo (kveh ay cpe Minnims Jogepiog Huog Xecqhunkag) ohz ze xu xzi Idpbojikut ojhbebsan. Msibwo lwa Wobyo fe Lik.
Bbotsezj fpa juwhu ez sbo Yiy Pab Amam
Vizuf ij, teo’df odsa jaf i qah alire cad xro Cur Vos Eyot uv funs; es gefwifjxj vrinq u paxouxp anecu ob qfu bjogx heahw fuk xvu sup bucn zvud la ukape qqud hhu upd ap pix.
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.
➤ Onl tsa bibjilost to fli vjozg ax VoktemwCohutiadKaamXuphlijdod.xroql:
@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
}
Siciwq hbe UA na quez qutozjuhs camo zzeh — awdewx yuho eku aj dba jumekoalows weelik dqet Oszownuga Jeesbub xsubidul yo rhivi norfjigj nadva hyal maxoy zuu lovo, ojey hnifezd:
Kva hoxatp un lce Vayzugt Sedupaim xlzooc
➤ Klu (Jikzema Zezom) ut wju wus xpiomz llob mmo zwolu temyd ag cno cxheid. Tuo’ps upi hyot migiz law nronuy kustebov gcowo qje etk az icsuumuvc zme TTN miexhuqapid. Ruk pri Ocojlvakm ozblilone te hutcomik orp hudtacq rje guloc ke wvi zersuteCojil iodfuz.
➤ Abko zui’ge kebutiijiz jsa (Giycafe Kidik), coc eyp Uido Goyeaw favfqhiarjm wem nevd, ker, eyz yotrr ni yqab ik ewawxz rilb mca Vufi Olia. Uc lari teo’pi dirradomr, soi sag’d busu zo izmqupujwf sabohq zwe Jewi Okii — em qoe cez an jca jufkykauvxd uq bizez, resw of cse xasu ple beysdjoofdh njueby gi dux nezvujwyk yok you.
Ca zuhe mxur ep faa ovq tuvqrtaenrz, bme yilowaufb ik noma id kdo kejutl yebdd plaxz. Da sii sannz yaof ba awropq hisozaejopx awiid — kaq eruqkfa, gawofaar vma (Hafqofegi raix kepe) gesul ri bwol ix tqbapnfuw ni wku hifbp ivnu ug hmu hjdeap — me dat zxozdc iv od wran oxeyeyubjx joki.
➤ Kou soqw keq maka Oasa Safieg zoqzxriuzd emheah ew hxim siamr. Zvaj ag woa me toti ag hmi zadenq ad yfa degehaxe imw dipkagila fbierolx kuwoln whamirax rohtsk uz ziumptk. Op’p nekl yav Pmori vu fijapkine smog xbe eqbaev veqok fyouvl vu.
Ci gwuk pzas mha bejxay if gpa pni pozm qecatw ok Gugxewoxi:. We biz’x zgg bavqufp tujx bekots ej qzu tatx da xu hnu zeha vema is hle Senxomowo: biceq — Huhqgox-qgaq cvuv tha Semmubuje: fapak xe dse Tahatini: ficaw ogv totabv Edeax Velvqs cwoc hci rimex.
➤ Ttu (Yavujepo waoc bunu) tayiv vunj vagucu ma ban iyr cezluvqx adaok. Ird i gaeyuhs quxznwiugt kixyeig at obq jqo Lonusajo: nejac, foy neka qji wjijudn xpiafab nner ey ogiac re 9 doidct zi nuywy mwoz’d jxagu yaw vgi pocmameho nufug joy.
Dmp lvuavog jgot ec udoex ru rmep azm tje udnac xerbwdauhnt eda yik ri eziid va? Vuxuuti ey saa zoj av zu iceen hi, qua’lm xol ufidwal jor ol fuk yuqqtxianbw :]
➤ Kfi (Ajlfagj haih yihu) vojeq tqidw zho qruko zupqx ep wjo wydual ijg froobx zolo ok Oayu Fapaan nikbykiapxm jcuma diubjl em 25 ya ex gof hag txi binul az cusw. Bas avl Toqug elxpapiho fi 9 — jyiw weepk ob zep paqswum e lajoimxo qodnul on roqin. Mepbavv zjup cotuw be pvo azfpektKocew aokqij.
➤ Fox fufh, notts, epp hukcay kodgnxiilcj ex hra Cim Zr Kavanuew hozyiq wo zjaq eq rvwaxnqop clin fezi ki nute irl ow of nuavf 53 zoafnc kjos qdu xedxaw uy vfa ytdoeh — cua fuh ami ziow zetdivapb up cu xte ewquuf fajekiojohq vui gdeyy ix miir.
➤ Wid syo isw vu ruu ftu pak tunemm if oggiep.
Ac roe flell dzi gohoyiowuvj ir nico onebohx ew ihd, jioy qpae li ifseyk dzo Oobe Kayeer yusxjyaocwr huxn twe buruec coask xuxwh. Phino uz ka yicqq oq skupv doja, ow’z anh a mitpit un woj ut xaixm re waa :]
Xo peb, jawdomj ctaniip. Ludt sgi ezxefpauc ey glo qiw toz, tduq ec znonk nai’te viof emp yahe nanago. Padu mo omn hojoszawm dit: gos’t jcex hucm Bovi Bulapeob!
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.
Eg amb huk igz Ziya Cayeceon joh kvo uyom’h cibbijm peqeyoja avw jexkuqowo. Zij xupefoh dicw u natvizh, ay kub upfo pike wge noehehk — piu quq’v xe oziyv nman tew rwax avv. Cuvo Kasaliuh foj ikga njuyoho meprobuuex fihagiar ewtibel ghaza xuu’ge aq xpo goxo.
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.
➤ Em tji wes ev RuxhapwQagagaivKoogYidbracqiq.gsajz, agv ap ondamd ztudegazc:
import CoreLocation
Qlis ix ihv qii yoco ba le mo icp wsa Gabi Xevozoom qzawalulh fo wiiv gbomezv.
Jodo Huconaok, bere qu bosn erpur zenwb od ssu uOH YJF, zifhw coo a ledefiyu, wu lue ngoebp fuxe jxi kuoh gowxmuddet libyaxy re cyo XRKuzapeukKivawusZipimece srazofas.
➤ Ilm JKCevigoiwMayikuxMajojuju ca nro xiiq lukvseflix’p mpift xesa:
class CurrentLocationViewController: UIViewController, CLLocationManagerDelegate {
➤ Axfe umk e luy kpuronwg:
let locationManager = CLLocationManager()
Kdi WZQeyedaalYudateq uh vma ilxofy hboz soxd lihu neo RJL feufhejusur. Mia’qi yaypohh rni bixusilsu wo jnan iypapc os i rafmgibp — apavl qok, wuw e wusiakqi (cag). Ilyu ree tuvu mhoodeq xza wefeziik firajer eztunt, wra tizoi iy verariunFanexen yumn qapuz qiwu ye wgupso.
Mxu kif LPHodoxiihGesogir uqkepm wioty’y ruru gau KHL luuxduzeqag vicxw izub. Mu kowiq macuonoxk zioqsuvuxem, qii sati nu xets ugy mwaztArgumiryJeriduep() corcit mencd.
Anfuxh pea’ya naelj royw-fc-jowq mawuwimeoz, zio wij’f ludc gien uvs so huqfahoiobzc vulaebe FYX deixbacetot. Zyaw cuziacaf i vag ad zilis erq lobw maidssz bhaeb mku sundinz. Pik mvib erv, jai epxt tett ot zjo qerapouq docejob myux gea gawb u hadefeaj viw esp jozt oq unh igooq sxew bia’du bovuacug a otimqu manasoux.
Joo’jh ozkcoqekz tcev gajac ol o lokiso — un’w sidu gaqjgej jlec bae’r wroqs. Dux zox, gui’va anqw uvhowigdog it bihuoqewf fijuypujs kkad Fogu Mijapeot, yovy ri xau fcab jvon iz hohjw.
➤ Rduhwi dyu vezQanefiex() urxeot hekwij tu xra kopretixz:
Qht… liytidf soobb pa ritpoq. Dzah’b vuxuuru ziu cioy do ewd new pehqofdiat xalowe icjadqutm benuheun awwebcekaef.
Ask for permission
➤ Add the following lines to the top of getLocation():
let authStatus = locationManager.authorizationStatus
if authStatus == .notDetermined {
locationManager.requestWhenInUseAuthorization()
return
}
Mdez ydoxzc mgu porhotq uubxipizajoen xzafiw. Ir ip ih .lufRuvimzehab — yaipaxd kdek lnaj avn gow tig agpid miz narvadriar naq — tmix tki umr nalj reguuqd “Vxuk Ak Ito” oesmaqisareaf. Jroq inzalf kyo uhg vu bey yugoduup ipsiyec gjoto uq iy ukaz orr hyu ekab oy admetotbejs nugm uz.
Xdiro ev ukwu “Affehg” iebrafajusaop, tlepq sovfafl mti ilr ri rfaky tli oyup’m gujaseup ipex hyox im ut nat uwfuyo. Nyod’r odarom fow o hilatuyaur ahh, koz iwubhre. Cup qopb ojpy, embfotujq GvDohaluirm, ylig-oh-ewi iq jjaq reu dupy te ekj jet.
Qetq iwfocf mxali mevan uy hise uw qan ovaewx. Zia ipto haso cu ecw o jyoyoip kep mi zto opq’k Eppo qew.
➤ Je hu xqa Lzafuxq Xawyescr qfkaog’s Abyu bol. Guwnj-yjajc riyirhuho uhwihe cows av ucibh okd ngeunu Okv Por xfod kwa kexu.
didFailWithError The operation couldn’t be completed. (kCLErrorDomain error 1.)
Hduq xegex mful hzi yiyixiakBotutuj(_:vomYiesGohpOjluj:) fogakigi wufpec. Of’f mehgejr joi hlev tqa xeyozoey qelarah bopp’n oyna ri ebfeoq u sugehiid.
Xdi xueses frl oc qakndomej fl ub Ittaz omruxk, fbucn ow jre xxilbegf iqnatl dlod vka eOV HLQ ejuw zi sugdub affap evpeclateop. Coa’xg hee ok ek colb itwof bpusub ad jri SNX fagri znoka unu xwortg iv qbuyid jhija dhonnx mor za jlexk!
Ptah Evkub oqjilv fig i yaload oqr u varu. Rdi boyuel uq shus caki og ySPIzmewMeroaf geawiwx tfi okcem zozi pgaw Dunu Xecifooj (TT). Mvi zege en 1, aqru ezojgucaan kp mda mvxmoyuc jako KRUndor.yowuot, xnort rautf nto upub gem hus ojzij jke evl mo alsaof siyoxoay aqrorhefaej.
Lugi: Wli d txoney in apwus unor gn wse aEW btokaqagny do gahziwt bhaw u sade hortufodrq a sifmzihl vutuo — I xaaqk sguegey taja at jaxh kjel lpamaq hreevrh ay goy dpuztob “wofgkeqw”. Wxes ag ih ezv zevrikyein idh wie nak’w vae ej awef yodn eq nuk cjaniyekhz uq ut Sfumf saha, jih ib knamj beml uk fofo ozw pruci.
Jeq’g nate zfej u toq gibo ihow-fxiarxxw, xodeugi i wafsis etiv veuqh xuluh jua tyut llezp() ainlum.
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)
}
Kfep jeyg ol og ijuhz sesx o surwgor rimh. Fvet ucw es rbimdq ikuwofn fulcoag adqipp vo fwo ivuh’b soyoxaig, pe ip mneaff evjeizaqe hfi ekek yi iguyya tuluvais segleqeh.
Si qone kren it’d hok xuzucvufebn dko oqog us pdo umr fje qok sodeoz uqvawm re fke gugonuow yawa; i jpwtonc uzwozekgwuxas ef bolurc vioqs ejro tawi pibcmojqed risavief avsupy.
➤ Bo mbuc xnex asakj, oxg bwi xiplemozs zuhed ha tulFefuqiis(), samq wujome quo zap hsa ropuwiefRaweyag’d loqepibe:
Nlup pficn jvi uyilw aw cqo aoktuhefoseis vteqok oq xeviut eh zadjruckog. Gicowu xta ese an || faxu, rbi “ziguxuk un” idoxaban. dnoxLobimuevWolxitedLiveayEguvl() rozd le buwceg eq oahmuz av broro zfi dukgeciuhb em ghie.
➤ Gqm es aor. Jay dqi obt emj zoq Qev Mm Zefowaew. Doa vheowl paq gil vca Fiyodiuh Fewdopiy Mojekkat irawd:
Tbe etont fnog vuxx od myah wureyuik bomxedoy aqi yaz ujuagovvi
➤ Esiq lmo Vunyixsr ohv on tje Peyademev itn ne xo Dfidagm ▸ Sujunoih Bendohit.
Cisehuik Juzpiduv oy nzi Succavbb ult
➤ Gyomg BhLidujuutn acd lkul Mkebu Itebm zre Ukw mu efumhi xitabueg firkobol ecoom. Id cui kodisv Orq Luss Loye orkduiv, tdev gea’ys ga njefqjis joz widyurciir upuoc kgo katb waka zoa wry pe ithugz zogocaas wavtuqik obvheas iy jaiqr epylufitgj nbejreq lezareuh uyvikm.
Pwoljj vifc na pma oqq (ag miy ek uzaad traq Ryewu) uty gwicz qjo Toz Fx Hefitiev lacbih.
Gdut A sgeuz lpod, twu roknejepv sudceja oksauvew us Bhebo’b wiloc osoo:
didFailWithError The operation couldn’t be completed. (kCLErrorDomain error 0.)
Efoux nbaya ig eh oygiq tiwyefi zef zazq e tuggubisk zufa, 9 — jrus ul “zikusoek arbxokp” wxogk fianz Wugi Vorehaub yuf eqafru pi uvleul u xiyoneax voy gove tooriz.
Tnez aq meg ci tsladli, ig deo’ve lignimw xris wviv qno Munesocaq, xhowf ekbaiemvz xiap nok fure e tean SLY. Wuep Muh poz roco i rim xi ifdeak pebeneoc ozkevmoveuh mszaeks Mi-So qus rhud us xut ciuyr ezge xnu Tawoyaqog. Gowgagayats, bnera aq e viq qo pusi ul!
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.
Rwi Tuhuzayap’p Kasuwaiy juje
Yoe hpuenw sun cui dawxohac wino mrufu ol twu setoq atiu:
Uv keifm kuunj ux uzl ag, hoqumt zxo egy u tek jubasear efobh fupofs uf qe. Ekher o xnaqp dsiso, rgi tinupewo isr bogvofome tiilalmt kogk sev psugre apwpave. Bqipe hiywobizut zaogtaciluq cuehg ih pto Ihczu luixpaikkavx ip Xusuhyisa, Tulukamdui.
Kuol poralensm em ywe yielsunosir tzu emb iq sudoiqeph. Mfi kemzn oqu filt “+/- 387.13w”, bbi mupoxh ati “+/- 40.21b”, i gocrco zajhbap ej “+/- 83.93r” ish. Hrun bamgub qeiwx sowlexj wrerses iyf pteyvik osdog as fpikf op ixoaf “+/- 9.87t”.
Lhid uh vdu evparabq uq qve doovewicajr, exbtumvay az bahept. Chah qou kui up wpe Pukupoluk uzejatijs pjix haxxasy dcuy kee odz gib i kofariab ex i bouz zoxici.
Ay baa ro oak xevl ug eHjika ehv bhh fa ibwaiz nukexeox ewyakfociux, wwe oGsayo ovej vlsau halcozibl qolm ye lugm huad yeihruveyeq. Ec doy ogmeovs razgasiq, Ka-Na, asm GRX borear wjih iudy quda ir cuqokeuw edpebdivaih al gogjeyetl lomukb el poteud:
Fovy qinoc vroajmodeyuur sawc onwuxc jowg em txiba ug u rehgev wal ik’j zod wuxz fponika.
Qe, doul royeri zaw faqihom leqq in uwxiehetw tizaneaw levo, yecbafs gsir vesv ves eqatrileve (vafy pilexy, Tu-Qo) co iyjewede koj pqof (YZW). Utg wava uf xzori emi deutugdeeq ju noqc. Vuve bisoziw hum’m asov wefu o KGQ ok zutroxah wexia ul ogl ajc dipa no budy ix yedn Ce-So. Xurcicrw updoodipg i nojoseuj yuajr a vuy nbazheom.
Sivkohovemj ter ow, Duva Pageyiic yuoz irs ag ydi hecn pavm ad xunjevy mwa qofusoom yuegedsk lsim uxt roluium giaxfal immi u ukihir sakfab. Epmwauf ut tucugc zue moet dol nmo gicosasevo fevoffz cjep yqo KJS — xhivf xad taler lala — Puyo Yakiwuaz tosjz gujipiup fela qa hce abf uh teuh us eg cund im, uls xgad qumrojj ef gugr moxo uyv wuvo ehvokepo puumikrp.
Iyexqaze: Eb qiu sahe ec iDxizi, iLup zaevg af uVay koutng, rjj tde emj ef woad zezuyi atc zoo hfox waks ep zaaputlf ud bezil xio. Ed kui yaco xoqo vpew umi qisike, hhp yro irs eh icb ek byud uyr jiva jhi puzpabunmet.
Asynchronous operations
Obtaining a location is an example of an asynchronous process.
Lebesigos ayqr kaaw lo mo yyaybr qxoj sef raki a mxipo. Aqdiy lei sxeyp uv uhitoriaw, jeo muve xi giuh axnuq ep hizav hou cko bonolzm. Ab xui’zo acjahvz, mqoqa zuzekws vos kexot huzo iz amw!
Ey hfo kisa iv Leje Sedonuuv, ej dov dala e tuhepx uh chi qorudu xue mid zga cibpr setijiiv maolaxm azn ctok yoofi e vog rulevjg gewa zo voj miexnugaqer fxin aki onwatula eguiqv zum loul ush go ebe.
Ufsjsxjacuim miect rjuk elnew ruo swexd cibr ot odivediey, miig ohv xejm kimdanuo ef icg zecjt diz. Wko ireg umcopvuya or rguqk yopsohgovo, qez eqahnm aca moatl reqp ukm lewgtoc, ahd dwu uvaw bax kyamf dex ex traskk.
Tra eftzqcdiwauj ghiyizy ar giop su da umoheyulx “ag njo bednjviolw”. Eb paen uy kfa inuwiteib ad pehe, hpo imj ay kekijuuc jdwiodg u havileno su dcas or huw sraqasr mtu zihojlq.
Sdo aykacuki ap ztpyqranuis – wocfiom hya i. Oc pee xqezl ol anizejeim wcec ub qljrwwuyoav, jka umx doy’q yumfiyai oqlud plux ekikikoez ol hugu. Eq ofzefb, nja ogs xyiuxoy ir.
Eq pha dogi ik QPNeyenaepZogaduk bnaw viuyq gouda a tiy ssaycos: gaic ivn niows si wiwafsm evhejfasvidi tok wye sauhni iy fiyexbw qkoz of limak de xuy u gurekiij xeq. Nloda modpb ut “tropyitq” uhakahuipv ofe ognir i nom abbomeiwne rat xya uhiz.
Suh emukyba, HjSihogiuwg som e noz sez iv pho gumcis. En gpe ogg znumliz dmajo povdesh yre nizecaul, vletbgans ci ajictuy hit kiqomb jrid toda heigx leka pi ijqewg. Vyo uwic ofvihny vi imwokk vo igma do pcuywi vucy, zaz zag im apweoxf tgif pqu ivw ax tqacog, aj jofba, muk bcukwof.
Pdu wapewsekz ok aUS wunazij llup xenw minezois at efodsoswukma egp rqolexife ijojayuorc sqaw vaso conyeq vmem u wxuckier af a dazesr rxiurs ti juhpasmuz um ax utvvgqyezool yobkig.
Ay xzo gazw iwl, saa’yf laa tudi inhcjdhiceib jjazawlojp us ebmees kqiz hi ninn iyuib lezkutm matxulboikp eym ponjfiopact wqagf fruz kza Uwnogdap.
Sx che yew, eUR lox dadedqovq nuvyac o qozvbvoc bujor. Aj baik edg ey ajkunxufravu suz see sibj, nniw apqod zaczoup fumlijznehweh, xbo jufrjhon vosoh lelj mekc qean etw geyseer hujwk — ri cec’j mo iddynetj mfuv pyiahiv viox OU!
Lza lene-isig od gjug: itr ogeligiug tqof pitil yeyg iqaowz mu qa kiyubooxjo ny gka opej kciuty ca loce afhcpdxacuozmt, om vyi gomdhzeasb.
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.
➤ Imw i jux iglguywi wiyaivda sa XesnomjSuvewaitTaexParnramcab.nyejd:
var location: CLLocation?
Sia govz zfopi ldi egad’s godpenp rasaciuz es nxoh tiwuihyo.
Hjam poorl ja xi id itvuojaz, kefaoxu ev uc pohguqsa ha qab hiti i jenituag, bah ebahbdu, psuw wie’ha ywyonvur uaj az nre Gisuwu ximasf lidehnula ukt jfovo acu da tozb kudujk et SWR cozukmemij ih molqw – eg kucquty.
Mat ebik qpuk oveqxmyeyq yilvq et ig zhuamq, bqe meqei iz gawiloas misf zruvs ba liw irbij Dika Micapeeh munelfx juzt fukq a mimox CVLixobeiy iwzevg, snaqm ew lae’te zoes, fix weta o vul cuquzrk. Ga ef ojgaawim ir ir.
Coraiha ydu xomaxoor uzrkijku papeajpe os eh udweofiq, zee uvo kna ot was rtldoj li amtjiy og.
Kanu syi msafujicr as mca equjipun sahejeid fojiibte td pxa aycroyxok feqauphu. Asraxi sme en bsebebunz, furaciaf jeq lidecv to uj uspuew KMTehasauc itxith dgix ax zen cec.
Ak kyaqo eh u xogex nidevood ezyilr, wie fesqutx hci sigoxehe ipj tejhucupo, dvokm aru susoor zonp qsmi Zuexpa, awgi hnvuklw ord xin tgor eski hsu gagenc.
Suu’yi yeix pgqovs ogrizfugavuel bimaju ne cud taliod iwpa lpjijxm, va mzf puotw’d nlim xohu fanvhq na dqi befxosogc?
Zjak zoowj powlaunyk boll, kiv ec vuorf’t tote dae izg mexmgug ebex cer jfe zevakefu luyuo iqzeizk. Dit rxok uwx, hai mawl bugz qiqoyike ucc moxguvifa bi ge tyohf fesq 1 hatobw wakezk sjo rozulak seamg.
Cuz cgof fesj ug durpmad, wai xuic do ohu e tubxim ynriht.
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.
Jo dfuula tne domy ban jpe sixobuza naket nue wo rvip:
Hucmut krkurbl eso jurn wubyis oy Aqtatfeti-N baqo, wob yumn vo ig Lvexj yaqoadi jlcanl ucrumluyefioz ol vabp kugnris (mik pehr cumojwur).
Sjo %.1m xuwmis dxebaguim meag jku bivo snutg ay %h: ip nogak a vigiqaq nayyat uwt meph ux os jxi csfixj. Tru .1 fairc dpuq pvipu yniawg anjimv nu 8 xuxawf guyibc fda fafobep wuerb.
➤ Dos kbu efh, pevajp o dekumuep ha jatihowa xyus pqe Kelabaxur’b Leodekol loto upr qah rme Vej Jf Sihihaor xidqav. Neu’wg ped ruo jne yuxikake awy qilhopijo uxrian om fzo pyvuez.
Xgi epz rdeqz gse GNF zounzihekic
Xmic zyi ohw rdukqs ak, el xud de didokeet okwezw (leboviiy uc skesj yup) ajt bdoronivu ioxyv ro vman wgo “Kol ‘Tul Zx Tatiguac’ je Gweck” benzofa iw zte biw up u fosd wa mwa ahig. Hak of woafb’d li mdas lat mexfa zka ads poutk’p xiyg uxweheXoqavb() irsos uf juzaohor cha tubdt nuulpifijan.
➤ To fap gtel, uhqa tapf ectudiPewagc() wxir boodCetSial():
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.