본문 바로가기

개발/Swift

[Swift] 객체 저장 - UserDefaults

반응형

UserDefaults

딕셔너리와 같다! 키와 값을 이용해 입력하고 앱을 다음 번에 열었을 때도 그대로 있게 한다.
단 하나의 제한이 있다면 이 딕셔너리 안에 넣을 수 있는 것은 속성 리스트이다.
속성리스트는 어떤 조합 어떤 데이터 구조를 말하는데
오직 배열, 딕셔너리 , 스트링, 날짜, 데이터 또는 숫자로 이루어진 조합을 말한다.

UserDefaults 에는 두가지 메소드가 있다.

func set(Any?, forKey: String)

키 인자에 해당하는 속성 리스트를 저장하는 메소드와,

func object(forKey: String) -> Any?

키에 해당하는 속성 리스트를 반환하는 리스트이다.

속성의 값이 정수나 문자열의 배열이 될 수도 있다.
키가 문자열이고 값이 실수의 배열인 딕셔너리도 될 수 있다.
그러나 CGFloat의 배열은 속성 리스트가 아니기 때문에 될 수 없다.

 

UserDefault 사용하기

UserDefaults를 생성하여 사용할 수 있지만 보통은 그렇게 하지 않고 공유된 것을 사용한다.
UserDefaults.standard 를 사용하자!
standard는 클래스의 정적 변수다.

let defaults = UserDefaults.standard

함수 set을 호출하여 값을 가지고 올 수 있다.

defaults.set(3.1456, forKey: "pi")
defaults.set([1,2,3,4], forKey: : "My Array")
defaults.set(nil, forKey: "Some Setting") // 그 키에 해당하는 값을 지운다

 

UserDefaults에는 다른 메소드도 있다.

func double(forKey: String) -> Double 
func array(forKey: String) -> [Any]?
func dictionary(forKey: String) -> [String Any]?

첫번째 메소드의 경우 키에 들어간 값타입이 Double이 아니라면 0을 반환한다.
마찬가지로 두번째의 경우 키가 배열이 아니라면 nil을 반환할 것이다.

UserDefaults는 설정과 같은 가벼운 것들에만 사용할 수 있다. (반성중...)
중요한 사용자 데이터를 저장하지는 않는다.

 

if !defaults.synchronize() {  } 

데이터베이스는 자동으로 저장되어 직접 저장할 필요가 없으나,
디버깅을 하거나 디버거가 멈출 때 등 필요할 경우가 있다.
그러니 명확한 저장을 원한다면 synchronize() 메소드를 사용하여 성공 여부를 알려주는 부울을 체크하자.

 

반응형

'개발 > Swift' 카테고리의 다른 글

[Swift] File System  (0) 2021.03.01
[Swift] 객체 저장 - Archiving  (0) 2021.02.28
[Swift] Multithreading  (0) 2021.02.26
[Swift] DispatchQueue 종류  (0) 2021.02.26
[Swift] ViewController LifeCycle  (0) 2021.02.26