일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스위프트
- url
- Class
- initializer
- UIKit
- property
- tuist
- Terminal
- 이니셜라이저
- instance
- delegate
- String
- enum
- Xcode
- Git
- Protocol
- struct
- IOS
- extension
- type
- init
- initalizer
- Unicode
- interpace
- 코딩테스트
- 디자인패턴
- optional
- Foundation
- Method
- Swift
- Today
- Total
아리의 iOS 탐구생활
[iOS/Swift] 라이브러리 SwiftyUserDefaults를 알아보자~ 본문
SwiftyUserDefaults는 한 곳에서 키를 정의하고, 값 유형을 쉽게 사용할 수 있으며, 컴파일 시 안전성과 편의성을 높여주는 컴파일 타임 검사를 무료로 이용할 수 있다고 한다.
한마디로 UserDefaults를 사용할 때, 타입 안전성과 코드의 간결성을 동시에 얻을 수 있는 아주 편리한 라이브러리다.
Generic, Subscript, DynamicMemberLookup 등을 활용하여
UserDefaults를 아주 편안하게 사용할 수 있게 구현되어 있다.
💾 SwiftyUserDefaults로 특정 값을 접근하거나 저장하기
1. 키 정의하기
정의하는 방법은 DefaultsKey라는 제네릭 타입을 활용하여 정의해준다. 이때 들어가는 타입은 저장될 타입을 의미한다.
타입을 옵셔널로 설정하지 않을경우 defaultValue를 꼭 설정해 줘야 한다.
let username: DefaultsKey<String?> = .init("username")
let launchCount: DefaultsKey<Int> = .init("launchCount", defaultValue: 0)
더 편리하게 사용하려면 아래 코드 예시와 같이 DefaultsKeys 타입을 확장하여 프로퍼티를 정의해주면 된다.
extension DefaultsKeys {
var username: DefaultsKey<String?> { .init("username") }
var launchCount: DefaultsKey<Int> { .init("launchCount", defaultValue: 0) }
}
왜 위 방법이 편리한지는 아래를 살펴보면 이해할 수 있다. 😄
2. 접근하기
DefaultsKeys를 확장하여 정의한 프로퍼티를 활용할 때
// UserDefaults 값을 손쉽게 가져와 바로 할당할 수 있다.
let username: String? = Defaults.username
DefaultsKey를 직접 사용할 때
let username: DefaultsKey<String?> = .init("username")
let username: String? = Defaults[key: username]
3. 저장하기
DefaultsKeys를 확장하여 정의한 프로퍼티를 활용할 때
// 값을 제자리에서 수정할 수 있다.
Defaults.launchCount += 1
DefaultsKey를 직접 사용할 때
let launchCount: DefaultsKey<Int> = .init("launchCount", defaultValue: 0)
Defaults[key: launchCount] += 1
🔎 Defaults는 어떻게 정의되어있을까?
전역적으로 사용되는 Defaults는 어떻게 구현되어있는지 살펴보니 아래와 같이 정의되어있었다.
public var Defaults = DefaultsAdapter<DefaultsKeys>(defaults: .standard, keyStore: .init())
DefaultsAdapter는 UserDefaults를 래핑한 구조체이다.
defaults는 UserDefaults를 의미하고, KeyStore는 DefaultsKeyStore 프로토콜을 준수한 타입을 의미한다.
기본적으로는 빈 구조체로 DefaultsKeys라는 구조체가 정의되어있었다.
이렇게 SwiftyUserDefaults라는 라이브러리를 간단하게 살펴보았는데,
추가로 KVO 기능을 제공하기도 하며,
프로퍼티 래퍼를 활용하여 각 Key 값에 캐싱 및 관찰 옵션을 설정할 수도 있다.
자세한 건 아래 링크를 참고해 보자.
https://github.com/sunshinejr/SwiftyUserDefaults#property-wrappers
🍯 꿀팁: UserDefaults에 저장되어있는 모든 Key-Value 쌍을 가져오기
dictionaryRepresentation() 메소드를 활용하여 UserDefaults에 저장된 모든 Key와 Value를 딕셔너리 형태로 가져올 수 있다.
아래는 활용 예시!
func removeAll() {
for key in defaults.dictionaryRepresentation().keys {
defaults.removeObject(forKey: key)
}
}
제 글에 틀린 내용이 있거나 혹은 도움이 되셨다면, 공감💛 ㆍ 구독✅ ㆍ 공유🔗 ㆍ댓글✍🏻 부탁드립니다. 🙏🏻
'Swift > iOS' 카테고리의 다른 글
[iOS] ChatGPT를 이용하여 WWDC 내용을 추출해보자 (0) | 2024.07.03 |
---|---|
[iOS] 웹뷰를 사용할 때 자바스크립트로 양방향 통신하기 (1) | 2023.09.24 |
[iOS/Tuist] scafflod를 사용하여 모듈 생성 자동화하기 (0) | 2023.07.09 |
[Figma/Tip] 디자인 가이드 확인할 때 유용한 꿀팁 모음 (0) | 2023.04.14 |
[iOS] Github에서 API KEY를 숨기기 위한 여러가지 방법들 (3) | 2023.01.31 |