Eisleck trail: Userdefaults

Ik heb al een tijdje niet meer gepost zoals jullie wellicht hebben gemerkt. Reden: retedruk met een nieuwe ‘zelfhulp psychologie-app’ die ik aan het bouwen ben met een psychologe en een andere ontwikkelaar. We verwachten / hopen dat deze half januari in beta gaat draaien, maar dan hebben we nog wel een hoop meters te maken! Ik post in het Nederlands (zoals de oplettende lezer wel zal hebben gemerkt). Kost me iets minder tijd dan in het Engels en de ‘code-technische dingen’  die ik wil posten kennen sowieso geen ‘mensen-taal’ maar de universele taal Swift.

 

Affijn, ik post vanaf een te gekke B&B langs de Eisleck trail in de Belgische Ardennen. We wandelen van La-Roche-En-Ardenne naar Houffalize in 2 daagjes. De totale track die langs de rivier de Ourthe loopt, kent 5 stages; in maart gaan we de tweede helft lopen. Het is glibberig en glad de eerste dag en ik ben maar liefst 3 keer (!) op mijn achterwerk beland. We lopen de laatste 2 uur in het donker en dat vinden de dames in ons gezelschap best spannend. Totaal onder de prut komen we pas om half 8 aan in het appartement in Nadrin dat blijkt te worden gerund door de ouders van de prof wielrenner Maxime Montfort. De tweede dag gaat de natte- al vrij snel over in droge sneeuw en voor iemand boe of bah kan zeggen lopen we we in een prachtig laagje van het witte goud van zo’n 10 cm. De condities zijn nu blizzard-achtig, maar als winterliefhebber is dit wel optimaal genieten! Een aanrader dus die Eisleck-trail. Niet al te ver van Nederland, maar een schitterende, maar vrij pittige wandeling!

 

Nu Code! Het gebruik van userdefaults

OK, genoeg over wandelen, ik wil het met jullie hebben over Userdefaults of beter gezegd, hoe dit handig te gebruiken. In de basis is userdefaults een systeem voor het bewaren en ophalen van simpele, gebruikers gerelateerde values. Denk aan de voorkeuren van de gebruiker (bijv. of hij notificaties wenst te ontvangen, wat zijn gewenste profielnaam is, etc.). Simpele dingen dus op het gebied van preferences. Userdefaults is niet bedoeld als middel voor de persistence van je app!

 

De usercase van vandaag is als volgt;

We hebben een app met daarin een aantal specials die worden gedefinieerd in een Special model. Één van de properties in dit model is ’type’ en deze property is van het type Specialtype, hetgeen een enum is die het mogelijk maakt om de verschillende specials die er zijn van elkaar te kunnen onderscheiden. In code ziet dit er als volgt uit.

 

Als de user een specifieke special voor het eerst opent (dit gebeurt vanuit een collectionview), willen we een intro laten zien (we noemen dit een onboarding). De keren daarna echter, willen we de user hier niet mee vermoeien; één keer is genoeg. We moeten daarom opslaan of de user de onboarding al een keer heeft doorlopen en zo ja, dan slaan we deze over. En hiervoor gebruiken we userdefaults. Userdefaults kan rechtstreeks worden benaderd als ‘global’ en een goede manier om deze te zetten is op basis van een ‘getter en setter’ die op basis van een key waarden opslaat en ophaalt. In code ziet dit er als volgt uit:

 

Moeilijkheid in ons geval is dat iedere special een eigen onboarding heeft. We moeten dus voor iedere special apart bijhouden of de onboarding al heeft plaatsgevonden. In dit geval heb ik daarom de enum SpecialType uitgebreid met een computed property die de key teruggeeft op basis van de Specialtype die op dat moment actief is. In code ziet die uitbreiding er als volgt uit:

 

Om de kans op typefoutjes te verminderen halen we de keys uit een Userdefaultsmanager class die ons de sleutel teruggeeft. Je ziet hierboven hoe deze aangeroepen wordt. De manager ziet er als volgt uit in code:

 

We kunnen dit vervolgens samen als volgt gebruiken in onze code:

Zoals je ziet heeft deze class een custom initializer waarin een special wordt gedefinieerd. Op basis hiervan weet je het specialType, want dit is onderdeel van het Special model. De getter en setter maakt gebruik van de computed variable ‘didOnboardKey’ die is gekoppeld aan de enum SpecialType.

‘Works like a charm’ zouden de Engelsen zeggen!

Happy coding voor nu en tot de volgende keer!