728x90
앱 개발 공부를 시작하고 여러가지를 하면서 정말 궁금했던게 사용자의 세팅 정보를 그대로 저장해 놓는 방법? 였습니다.
안드로이드를 공부할 땐 알지 못하고 DB를 연결해서 써야하나..? 하고 넘겼었는데 이번 IOS공부를 하면서 LocalDB 비슷한게 있단걸 처음 알았습니다!
"앱 실행 전반에 걸쳐 키-값 쌍을 지속적으로 저장할 수 있는 사용자의 기본 데이터베이스에 대한 인터페이스입니다."
앱 설정 데이터, 로그인 시 아이디 등 단일 데이터를 저장하는데에 적합합니다.
앱이 삭제될 때는 데이터가 함께 사라집니다.
key-value 형태로 저장이 되는데... JSON이 생각나네요... 그냥 JSON 형식으로 저장되는게 맞는 것 같습니다.
UserDefaults는 싱글톤객체로 생성해 줄 필요는 없습니다. 디자인 패턴은 3학년 때 천천히 배우기로...
이제 사용법을 알아보겠습니다!
func saveTasks() {
let data = self.tasks.map {
[
"title": $0.title,
"done": $0.done
]
}
let userDefaults = UserDefaults.standard //UserDefaults 접근
userDefaults.set(data, forKey: "tasks") //key를 통해 저장
}
func loadTasks(){
let userDefaults = UserDefaults.standard // UserDefaults 에 접근
//data 불러오기
guard let data = userDefaults.object(forKey: "tasks") as? [[String:Any]] else {return}
self.tasks = data.compactMap{
guard let title = $0["title"] as? String else {return nil}
guard let done = $0["done"] as? Bool else {return nil}
return Task(title: title, done: done)
}
}
UserDefaults.standard로 UserDefaluts에 접근을 합니다.
set 메서드를 사용해 키와 데이터를 저장하고
object 메서드에 키를 넣어서 데이터를 가져옵니다.
위 코드에서는 배열로 되어있는 데이터를 저장하고 불러오면서 캐스팅을 해 주지만
단일 데이터는 더욱 간단하게 사용할 수 있습니다.
var isOn: Bool = true
UserDefaluts.standard.set(isOn, forKey: "switch")
print(UserDefaluts.standard.bool(forKey: "switch")) //true
userDefaults.removeObject(forKey: "tasks")
데이터를 삭제하는 법은 removeObject 메서드를 사용하여 키를 파라미터로 넘겨주면 삭제가 됩니다!
728x90