글
개발 환경 : 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(만들고 읽고 쓰고 삭제하는) 지원
등등등.
해당 기능을 지원하는 데이터 형식은 다음과 같습니다.

사용하는 방법은 다음과 같습니다.
예시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") |
예시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
RECENT COMMENT