간단한 예제를 통해 UserDefault를 사용해보고 작성한 코드를 리뷰하는 글입니다.
1. UserDefault란
- 앱에 대한 사용자의 데이터를 저장하는 애플의 기본 저장소
- 앱 마다 존재하며 샌드박스 시스템에 의해 관리됨
- 주로 푸쉬 알람 허용과 같은 사용자의 환경설정 값 등 가벼운 데이터가 저장됨
- key-value 쌍의 형태로 데이터가 저장됨
2. 예제
1) 감정 다이어리
- 9가지 감정을 열거형 case로 정의
- 열거형의 rawValue를 UserDefault의 key로 사용
- 화면 로딩 시 감정별로 저장된 value를 읽어서 각 버튼의 타이틀에 보여줌
- 버튼 터치 시 value+1 을 새로운 값으로 저장하고 버튼 타이틀을 변경
@IBAction func touchButton(_ sender: UIButton){
sender.setTitle(getString(currentTitle: sender.currentTitle!), for: .normal)
}
func getString(currentTitle: String) -> String {
let key = String(currentTitle.split(separator: " ")[0])
let count = UserDefaults.standard.integer(forKey: key)
UserDefaults.standard.set(count+1, forKey: key)
return key + " \(UserDefaults.standard.integer(forKey: key))"
}
2) 기념일 계산기
- UIDatePicker 값 변경 시 오늘 날짜로부터 특정 일(day) 수가 경과된 날짜를 계산하고
DateFormatter로 변환된 날짜를 하단의 4개의 뷰에 보여줌 - 뷰를 길게 누르면 표시된 날짜를 저장하거나 기존에 저장된 날짜 삭제 가능
- 뷰 로딩 시 저장된 날짜(문자열)를 불러와서 하단 뷰에 보여줌
// UIDatePicker Value Changed Action
@IBAction func changePickerValue(_ sender: UIDatePicker) {
let dateFormat = DateFormatter()
dateFormat.dateFormat = "yyyy년 MM월 dd일"
for view in memorialViews {
view.dateLabel.text = dateFormat.string(from: sender.date.addingTimeInterval(TimeInterval(view.tag*100*60*60*24)))
}
}
@IBAction func pressMemorialView(_ sender: UILongPressGestureRecognizer) {
guard let key = sender.view?.tag else { return }
let alertController = UIAlertController(title: "이 날짜를 기념일로 등록하시겠습니까?", message: "", preferredStyle: .actionSheet)
alertController.addAction(UIAlertAction(title: "삭제", style: .destructive, handler: { _ in
UserDefaults.standard.removeObject(forKey: "\(key)")
self.memorialViews[key-1].dateLabel.text = nil
}))
alertController.addAction(UIAlertAction(title: "등록", style: .default, handler: { _ in
let value = self.memorialViews[key-1].dateLabel.text
UserDefaults.standard.set(value, forKey: "\(key)")
// print(UserDefaults.standard.string(forKey: "\(key)"))
}))
alertController.addAction(UIAlertAction(title: "취소", style: .cancel))
present(alertController, animated: true)
}
전체 코드 : https://github.com/Lieutenant-K/SesacIOS-EmotionDiary.git
'IOS' 카테고리의 다른 글
[IOS] CocoaPod의 pod install 오류에 대하여 (0) | 2022.09.09 |
---|---|
[IOS] UIView의 tintColor 프로퍼티에 대하여 (0) | 2022.07.27 |
[IOS] 열거형을 사용해서 간단한 앱 만들어보기 (0) | 2022.07.17 |
[IOS] AutoLayout으로 현업의 서비스 화면 구성하기 (0) | 2022.07.17 |
[IOS] 스플래시 화면과 다크모드 대응 화면 만들기 (0) | 2022.07.16 |