개발 환경 : Xcode 12.1

사용언어 : swift

UserDefaults을 사용해서 사용자 정보를 저장하는 방법을 공유하기 위한 포스팅입니다.

UserDefaults란 사용자 정보를 key - value 조합으로 저장하고 읽어올 수 있도록 애플에서 제공하는 기능입니다.

An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.

출처 : developer.apple.com/documentation/foundation/userdefaults

 

Apple Developer Documentation

 

developer.apple.com

 

다음의 경우에 사용해볼 수 있습니다.

- 앱에서의 사용자성 정보를 저장한다.

- UI 데이터 설정시 마지막 실행 때 정보를 저장하고 있다가 보여준다

- db 없이 간단한 데이터를 CRUD(만들고 읽고 쓰고 삭제하는) 지원

등등등.

 

해당 기능을 지원하는  데이터 형식은 다음과 같습니다.

UserDefaults 기능을 지원하는 형식

 

사용하는 방법은 다음과 같습니다.

예시1 - string 값을 저장하고 쓴다면?

//get
let defaults = UserDefaults.standard
guard let displayTimeFormat = defaults.string(forKey: "displayTimeFormat") else {
return ""
}
return displayTimeFormat
//set
let defaults = UserDefaults.standard
defaults.set("12h", forKey: "displayTimeFormat")
view raw gistfile1.swift hosted with ❤ by GitHub

예시2 - string array를 쓴다면?

if var keywordList = UserDefaults.standard.array(forKey: keywordField) as? [String] {
//get
keywordList.insert(keyword, at: 0)
if(keywordList.count > 5)
{
keywordList.remove(at: 5)
}
UserDefaults.standard.set(keywordList, forKey: keywordField)
}
else {
//set
var newList = [String]()
newList.append(keyword)
UserDefaults.standard.set(newList, forKey: keywordField)
}

지원하는 형에 따라서 마음껏 저장하고 불러오면 된다!!

 

단, 용량 제한이 없는 것은 아니니까 필요할 때만 사용하면 좋다.

애플 문서 : developer.apple.com/documentation/foundation/userdefaults/1617187-sizelimitexceedednotification

 

Apple Developer Documentation

 

developer.apple.com

One more Things!!!

UserDefaults에 서로 연관성을 가지는 데이터를 한번에 저장하고 싶다면?

Data 형을 쓰면 되는데 이 때 codable을 상속 받은 structure를 쓴다면 아주 쉽게 get / set 이 가능해진다.

struct ChallengeInfo : Codable{
var startDate:Date?
var achivedDate:Date?
var displayedDate:Date?
var nextPossibleDisplayDate:Date?
}
//get
static func loadChallegeInfo() -> ChallengeInfo {
let defaults = UserDefaults.standard
guard let challengeInfoData = defaults.object(forKey: "ChallengeInfo") as? Data else { return ChallengeInfo() }
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(DateFormatter.iso8601Full)
if let challengeInfo = try? decoder.decode(ChallengeInfo.self, from: challengeInfoData) {
return challengeInfo
}
return ChallengeInfo()
}
static func saveChallengeInfo(_ info: ChallengeInfo) {
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .formatted(DateFormatter.iso8601Full)
if let encoded = try? encoder.encode(info) {
let defaults = UserDefaults.standard
defaults.set(encoded, forKey: "ChallengeInfo")
}
}

codable이 뭔지가 궁금하시다면?

bmwe3.tistory.com/1765?category=682591

 

[swift] codable를 이용해서 json 파일 읽고 쓰기

개발 환경 : Xcode 12.1 사용언어 : swift 애플은 데이터의 json으로의 encode / decode를 지원하기 위해서 codable이란 프로토콜을 지원하고 있다 (Xcode 9.0+) developer.apple.com/documentation/swift/codable..

bmwe3.tistory.com

 

by 무위자연 2021. 1. 14. 11:00