
Náš iOS toolbox - Ako ukladať hodnoty do UserDefaults a KeyChain vo Swifte

iOS
Swift UserDefaults predstavuje jednoduchý a ľahký spôsob ukladania malého množstva údajov vo vašej aplikácii, ako sú používateľské preferencie, nastavenia a stav aplikácie. Práca s UserDefaults a Keychain však môže byť ťažkopádna, tu prichádza na rad rýchly balík GoodPersistence.
Používame triedu UserDefaultValue
, čo je obal vlastností, ktorý umožňuje ukladanie akejkoľvek hodnoty vyhovujúcej Codable
v UserDefaults.
Ak chcete použiť túto triedu, môžete jednoducho vytvoriť inštanciu triedy UserDefaultValue
a odovzdať kľúč a predvolenú hodnotu pre wrapper.
Napríklad, ak chcete uložiť meno používateľa do UserDefaults, môžete vytvoriť inštanciu UserDefaultValue
takto:
@UserDefaultValue("userName", defaultValue: "Guest")
var userName: String
Vo vyššie uvedenom príklade sa kľúč „userName“ použije na uloženie mena používateľa do UserDefaults. Ak pre tento kľúč neexistuje žiadna hodnota, namiesto toho sa použije predvolená hodnota „Guest“.
Tento property wrapper poskytuje aj ďalšiu užitočnú funkciu, pozorovanie zmien pomocou funkcie Combine.
Ak ste niekedy mali problémy s ukladaním citlivých údajov do Keychain, s balíkom GoodPersistence to nikdy nebolo jednoduchšie.
Na uloženie hodnôt do KeyChainu používame ďalší wrapper s názvom KeychainValue
. Ukážem vám, ako to funguje:
struct UserSensitiveInformation {
let userId: String
let dateOfBirth: Date
let address: String
}
@KeychainValue(
String(describing: UserSensitiveInformation.self),
defaultValue: nil
accessibility: .afterFirstUnlockThisDeviceOnly
)
var userSensitiveInformation: UserSensitiveInformation?
Vo vyššie uvedenom príklade máme štruktúru s názvom UserSensitiveInformation
, ktorá obsahuje všetky citlivé údaje, ktoré chceme bezpečne uložiť v Keychain
.
Ako vidíte, implementácia je dosť podobná predchádzajúcemu príkladu, ktorý používa UserDefaults
.
Deklarujeme kľúč a jeho predvolenú hodnotu, no okrem toho je tu parameter accessibility
, ktorý môžeme aj špecifikovať. Tento parameter má predvolenú hodnotu nula, čo znamená, že v prípade potreby ho môžete nechať prázdny.
Okrem primárneho účelu ukladania hodnôt ponúkajú wrappery UserDefaultValue
a KeychainValue
aj pohodlnú funkciu na pozorovanie zmien hodnôt pomocou Combine.
Povedzme, že chceme dostávať aktualizácie vždy, keď sa zmení hodnota userName.
Po deklarovaní premennej userName
pomocou wrapperu UserDefaultValue
, ako je znázornené v prvom príklade, môžete pre ňu jednoducho deklarovať vydavateľa pomocou Combine.
Tu je príklad, ako to urobiť:
lazy var userNamePublisher = _userName
.dropFirst()
.eraseToAnyPublisher()
Tento publisher vydáva novú hodnotu vždy, keď sa zmení premenná userName
. Na odber aktualizácií od vydavateľa môžeme použiť metódu sink
alebo **assign**
, ktorá dostane novú hodnotu vždy, keď sa zmení premenná userName.
V tomto príklade jednoducho nastavíme text štítku v metóde assing
:
var cancellable: AnyCancellable?
let userNameLabel = UILabel()
cancellable = userNamePublisher
.removeDuplicates()
.assing(to: \\.text, on: userNameLabel, ownership: .weak)
These example also works for KeychainValue
wrapper. No additional setup needed.
Prešli ste procesom ukladania údajov pomocou balíka GoodPersistence.
Teraz vás možno zaujíma, ako to funguje pod kapotou vnútri aplikácie. Našťastie sa balík dodáva so sample, ktorú môžete preskúmať, aby ste lepšie porozumeli jeho funkciám.
Ak ste považovali tento balík za užitočný, určite si pozrite naše ďalšie balíky. Ktovie, možno práve nájdete ďalší klenot, ktorý vám môže pomôcť posunúť vašu aplikáciu na vyššiu úroveň!