4월 11일 TIL (UserDefaults)

이승원·2024년 4월 12일
0

TIL

목록 보기
62/75
post-thumbnail

UserDefaults

예시코드 Github 링크
공식 문서

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

사용자의 기본 데이터베이스에 대한 인터페이스로, 앱 실행 전반에 걸쳐 Key-Value 쌍을 지속적으로 저장할 수 있다.

  • UserDefulats 는 Swift 내부저장소중 하나이다.
  • 간단한 Key-Value 데이터를 저장하는데 사용된다.
  • 주로 설정값이나 사용자 기본 설정과 같은 작은 데이터를 저장한다.
  • 예를 들자면 사용자가 설정한 다크모드 OR 라이트모드를 저장하는데 사용할 수 있다.
  • 런타임 환경에서 동작하고, 앱이 실행되는 동안 내부저장소에 접근해서 데이터를 기록하거나 가져온다.
  • UserDefault는 .Plist 파일에 XML 형식으로 데이터가 저장된다.
  • SandBox에서 다뤘던것 처럼, Bundle Container에 저장된다.
  • Dictionary랑 비슷하다.

데이터 추가 및 업데이트

let defaults = UserDefaults.stand
defaults.set("value", forkey: "key")
// 해당 키가 있으면 업데이트, 없으면 추가

데이터 조회

func object(forKey: String) -> Any?
	Returns the object associated with the specified key.

func url(forKey: String) -> URL?
	Returns the URL associated with the specified key.

func array(forKey: String) -> [Any]?
	Returns the array associated with the specified key.

func dictionary(forKey: String) -> [String : Any]?
	Returns the dictionary object associated with the specified 
key.

func string(forKey: String) -> String?
	Returns the string associated with the specified key.

func stringArray(forKey: String) -> [String]?
	Returns the array of strings associated with the specified key.

func data(forKey: String) -> Data?
	Returns the data object associated with the specified key.

func bool(forKey: String) -> Bool
	Returns the Boolean value associated with the specified key.

func integer(forKey: String) -> Int
	Returns the integer value associated with the specified key.

func float(forKey: String) -> Float
	Returns the float value associated with the specified key.

func double(forKey: String) -> Double
	Returns the double value associated with the specified key.

func dictionaryRepresentation() -> [String : Any]
	Returns a dictionary that contains a union of all key-value pairs in the domains in the search list.
let temp = defaults.value(forKey: "key")
print(type(of: temp))  // Optional <Any>

데이터 삭제

defaults.removeObject(forKey: "key")

사용자 정의 타입 추가 및 삭제

  • 사용자 정의 타입을 추가하기 위해서는 Base64 인코딩을 거쳐야 한다.
struct Person : Codable{
    var name : String
    var age : Int
}

// 바로 구조체 인스턴스를 바로 넣으면
// defaults.set(sam,forKey: "sam")
// let sam2 = defaults.object(forKey: "sam") as? Person
// print(sam2?.name ?? "")
// 오류

 // 사용자 정의 타입 저장하기
if let encodeData = try? JSONEncoder().encode(sam) {
	defaults.set(encodeData, forKey: "sam")
}
        
// 사용자 저장 타입으로 데이터 불러오기
if let data = defaults.data(forKey: "sam") {
	if let decodedData = try? JSONDecoder().decode(Person.self, from: data) {
		print(decodedData)
	}
}

전체 데이터 조회하기

for (key, value) in default.dictionaryRepresentation() {
	print("\(key) = \(value) \n")
}
profile
개발자 (진)

0개의 댓글