iOS SwiftUI: Animácie, Čas a Protokoly – Pohľad zo Stanfordu
iOS vývoj so SwiftUI: animácie, čas a protokoly. Prednáška zo Stanfordu prináša praktické riešenia pre animácie, zobrazenie uplynutého času a dôležitosť protokolov Equatable & Hashable. Vhodné pre iOS vývojárov!
V najnovšej prednáške z kurzu CS193p na Stanford sa študenti ponorili do sveta animácií, spracovania času a protokolov v iOS vývoji pomocou SwiftUI. Prednáška obsahovala praktické riešenia problémov s animáciami, demonštrovala vytváranie displeja uplynutého času a vysvetľovala dôležitosť protokolov ako Equatable a Hashable. Ak ste sa niekedy snažili vytvoriť plynulé animácie alebo pracovali s časom v aplikácii, táto prednáška vám môže poskytnúť cenné poznatky.
Kľúčové poznatky
- Animácie a ladenie: Pri riešení problémov s animáciami je dôležité ich spomaľovať a identifikovať presné pohony, ktoré spôsobujú problémy.
- Uplynutý čas: Použitie
DateFormatters formátom "offset" umožňuje jednoducho zobraziť rozdiel medzi dvoma dátumami, čím sa vytvára displej uplynutého času. - Protokoly: Protokoly ako
EquatableaHashablesú kľúčové pre porovnávanie objektov a zabezpečenie ich správneho správania v rôznych situáciách. - Triedy vs. Štruktúry: Použitie tried umožňuje vytvárať top-level modely, ktoré sa dajú priamo odovzdávať do pohľadov bez použitia
@State.
Animácie: Odstraňovanie chýb a optimalizácia
Prednáška začala revíziou pop-kvízu z predchádzajúcej lekcie. Hlavným problémom bol neočakávaný efekt zmiznutia a opätovného objavenia sa riadka "guess" pri reštartovaní hry. Riešením nebolo len zakomentovanie animácie opacity, ale skôr aplikácia animácie iba vtedy, keď je hra skutočne ukončená.
Dôležitým bodom bolo aj upozornenie na používanie vlastností frame s pevnými hodnotami šírky a výšky. Namiesto toho sa odporúča využívať pomery strán (aspect ratios), aby sa zabezpečila responzivita UI prvkov na rôznych obrazovkách, od telefónov po iPady.
Uplynutý čas: Zobrazenie s presnosťou
Jednou z najzaujímavejších častí prednášky bola demonštrácia vytvárania displeja uplynutého času. Použitím Text view a DateFormatter s formátom "offset" je možné jednoducho zobrazovať rozdiel medzi dvoma dátumami – začiatkom a koncom hry.
Pre správne fungovanie bolo potrebné zabezpečiť, aby sa hodnota DateNow nepočítala len raz pri štarte hry, ale kontinuálne. To sa dosiahlo použitím TimeInterval data source. Pre zlepšenie vzhľadu textu boli použité modifikátory flexible system font a monospaced, a tiež bol nastavený limit riadkov (lineLimit) pre zabránenie pretekaniu textu.
Protokoly: Kľúč k porovnávaniu objektov
Prednáška sa venovala aj protokolom, ktoré sú základným kameňom programovania v Swifte. Zvlášť dôležité boli protokoly Equatable a Hashable.
- Equatable: Umožňuje porovnávať objekty na rovnosť. Ak je štruktúra alebo
enumdefinovaný s vlastnosťami, ktoré sú samy o sebe porovnateľné, Swift automaticky vygeneruje implementáciu protokoluEquatable. - Hashable: Vyžaduje konformitu k protokolu
Equatablea zabezpečuje, že rovnaké objekty vždy vrátia rovnakúhashhodnotu. Je to nevyhnutné pre dátové štruktúry akohashtabuľky.
Pri použití protokolov je dôležité rozlišovať medzi typom some (skrýva konkrétny typ) a typom any (uvoľňuje silné typovanie Swifta). Odporúča sa používať some namiesto any, pretože poskytuje lepšiu kontrolu nad typmi.
Triedy vs. Štruktúry: Kedy čo použiť?
Prednáška tiež porovnala triedy a štruktúry v Swifte. Triedy používajú referenčnú sémantiku, zatiaľ čo štruktúry používajú hodnotovú sémantiku. Pre top-level modely ako CodeBreaker sa odporúča používať triedy, pretože umožňujú priame odovzdávanie do pohľadov bez použitia @State.
Vzhľadom na to, že triedy nemajú zabudované sledovanie zmien, je potrebné použiť makro @Observable pre emuláciu reaktívneho správania SwiftUI.
Čo nás čaká v budúcnosti?
Prednášateľ naznačil, že nasledujúce lekcie sa zamerajú na vytvorenie výkonnejšej aplikácie s list viewom CodeBreaker hier, čo umožní používateľom vytvárať, mazať a sledovať svoj pokrok. Táto funkčnosť bude vyžadovať rozsiahlejšie použitie protokolov a reaktívneho programovania.
Zdroje
Približne 216 gCO₂ bolo uvoľnených do atmosféry a na chladenie sa spotrebovalo 1.08 l vody za účelom vygenerovania tohoto článku.
Komentáre ()