일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- swift
- 러닝타이머
- Xcode
- Protocol
- CoreLocation
- font book
- AnyObject
- App Store Connect
- weatherKit
- 서체관리자
- RunningTimer
- Startign Assignments
- 단일 책임원칙
- MKMapItem
- 러닝기록앱
- dispatchsource
- MKMapViewDelegate
- 영문 개인정보처리방침
- addannotation
- UIAlertAction
- UICollectionViewFlowLayout
- 클로저의 캡슐화
- Required Reason API
- Timer
- 한국어 개인정보처리방침
- xcode로 날씨앱 만들기
- SwiftUI Boolean 값
- weak var
- CLLocationManagerDelegate
- WeatherManager
Archives
- Today
- Total
VesselWheel
setValue 함수 본문
Sets the property of the receiver specified by a given key to a given value.
인스턴스 매소드로 부여된 key와 key를 쌍으로 저장한다. key값은 String으로 받는다.
setValue(_:forKey:)
func setValue(
_ value: Any?,
forKey key: String
)
공식문서
https://developer.apple.com/documentation/objectivec/nsobject/1415969-setvalue
Todo 앱을 만들면서, Userdefaults를 이용한 데이터를 저장할 때 사용되는 setValue 매소드
//
// TodoStore.swift
// TodoList
//
// Created by woochan on 1/7/24.
//
import Foundation
/*
앱이 종료되어도 데이터를 유지하려면 메모리가 아닌 저장장치(스마트폰의 경우 플래시 메모리) 에 저장되어야한다.
저장방법 중 하나 : UserDefaults (요구사항)
UserDefaults 특징 : key-value 쌍으로 저장할 수 있다.
공식문서를 보자 : Todo 데이터 타입 은 저장할 수가 없다.
1. Todo 를 [String: Any] 로 표현하여 배열로 저장
2. [Todo] 를 JsonDecoder 를 사용하여 Data 를 저장
*/
final class TodoStore {
static var shared: TodoStore = .init()
private let key = "TodoList"
private init() { }
// CRUD
func readAll() -> [Todo] {
guard let todoListData = UserDefaults.standard.data(forKey: key),
let todoList = try? JSONDecoder().decode([Todo].self, from: todoListData)
else {
return []
}
return todoList
}
func readAllAndCategorize() -> [String: [Todo]] {
let todoList = readAll()
return Dictionary(grouping: todoList) { todo in
todo.category
}
}
func add(_ todo: Todo) {
var todoList = readAll()
todoList.append(todo)
guard let data = try? JSONEncoder().encode(todoList) else {
return
}
UserDefaults.standard.setValue(data, forKey: key)
}
func delete(todoId: Int) {
var todoList = readAll()
todoList.removeAll { todo in
todo.id == todoId
}
// 원하는 Todo 가 지워진 상태
guard let data = try? JSONEncoder().encode(todoList) else {
return
}
UserDefaults.standard.setValue(data, forKey: key)
}
func update(todoId: Int, isDone: Bool? = nil) {
var todoList = readAll()
guard let targetIndex = todoList.firstIndex(where: { $0.id == todoId })
else {
return
}
if let newIsDone = isDone {
todoList[targetIndex].isDone = newIsDone
}
// 리스트가 업데이트된 상태
guard let data = try? JSONEncoder().encode(todoList) else {
return
}
UserDefaults.standard.setValue(data, forKey: key)
}
}
//let sampleData1 [[String: Any]]= [
// [
// "id" : UUID().hashValue,
// "description" : "책상 정리"
// "isDone" : false,
// ],
// [
// "id" : UUID().hashValue,
// "description" : "먼지 털기"
// "isDone" : true,
// ],
//]
//let sampleData2: Data =
//"""
//[
// {
// "id" : 123129123213,
// "description" : "책상 정리"
// "isDone" : false,
// },
//
// {
// "id" : 311293801298,,
// "description" : "먼지 털기"
// "isDone" : false,
// }
//]
//"""
해석
setValue(_:forKey:) 메서드는 UserDefaults 객체에 값을 설정하는 메서드입니다.
이 메서드는 지정된 키에 해당하는 값을 설정하고 저장장치에 유지될 수 있도록 합니다.
위의 코드에서 add(_:) 메서드에서 UserDefaults.standard.setValue(data, forKey: key)를 사용하여 todoList를 저장하고 있습니다.
이 코드는 todoList를 Data 형식으로 인코딩하여 UserDefaults에 해당 키로 저장합니다.
'Xcode Study' 카테고리의 다른 글
Left Constraint 와 Leading Constraint 의 차이 (0) | 2024.01.23 |
---|---|
Half Modal로 기본 뷰 위에 다른 뷰 올리기(feat. UISheetPresentationController) (1) | 2024.01.22 |
xcode 협업을 위한 storyboard 분할하기(feat. storyboard reference) (0) | 2024.01.16 |
UserDefaults를 이용한 데이터 관리와 ToDo 앱 만들기 (0) | 2024.01.11 |
Swift에서의 네트워크 통신 이해하기(.feat Decodabe, Encodable, Codable)(2/2) (0) | 2024.01.04 |