[IOS] UserDefault 사용해보기
IOS

[IOS] UserDefault 사용해보기

간단한 예제를 통해 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

 

GitHub - Lieutenant-K/SesacIOS-EmotionDiary

Contribute to Lieutenant-K/SesacIOS-EmotionDiary development by creating an account on GitHub.

github.com