Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 패캠챌린지
- TableView
- 패스트캠퍼스후기
- 직장인인강
- userDefaults
- ios
- 패스트캠퍼스
- 열거형
- 프로퍼티 관찰자
- 인스펙터
- SeSAC
- beginAsyncWrite
- 문자열 보간법
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- enum
- 독학
- Git
- 직장인자기계발
- Threading
- RawValue
- 함수
- 옵셔널 체이닝
- Realm
- Background
- Optional Chaining
- swift
- cancelAsyncWrite
- switch
- xcode
- 기본문법
Archives
- Today
- Total
아삭아삭 iOS 개발
[TIL] 2022.07.15 (SeSAC iOS) 본문
오늘 공부한 내용들을 내가 잊지 않기 위해 기록합니다.
틀린 내용이 있을 수 있는 점 참고 부탁드립니다 :)
■ 오늘 & 주말 과제
지난 2주간 수업내용 복습 철저히 해보기!!
원래 오늘 평가과제가 나갈 예정이었는데, 아쉽게도 다음주로 미뤄지고
이번 주말은 이제까지 배운 내용을 잘 소화해보는 시간이 되었다.
진짜 다행이다..흡
이번주 주말동안 (최소한) 아래 4개 기능들 추가구현 해 볼 예정이고,
정리못한 문법들이나 Mission과제들도 보충해야겠다.
- 넷플릭스 로그인 화면에서 화면 전환 구현해보기
- 넷플릭스 로그인 화면에서 조건에 따라 얼럿을 띄워보는 것
- 기념일 계산기 앱에서 설정한 Date를 저장해보는 것
- 감정일기 카운트를 리셋해보는 것 (userDefault)
오늘은 자기전에 감정일기 카운트를 리셋만큼은 구현해보고 자야겠다!
userDefault에 대해서 오늘 처음 알게 되어서 꼭 적용해보고 싶다.
감정 다이어리 App
- 감정버튼 클릭시 숫자 증가하기 & 저장하기
- 기존에 if 문과 [sender.tag]으로 구현했던 코드에 userDefaults 를 적용하기가 쉽지 않았다
- 가장 삽질을 오래했던 포인트 2개는 아래와 같았다.
① '기존 감정숫자 가져오기(userDefaults.standard.데이터타입)~새로운 데이터 저장하기(userDefaults.standard.set)' 사이의 연결을 어떻게 할까?
→ 데이터 저장소에서 받아온 기존 데이터에 Int값 1을 더해주고, emotionArray[sender.tag] 에 담아서 스무스하게 저장단계로 넘어가고 싶었으나 index 오류가 났다.
데이터 타입을 맞춰줘야 할 것 같아서 데이터 가져오기&저장하기 단계와 데이터 타입을 통일하기로 했다.
② 감정버튼 클릭시 데이터 가져오고/증가시키고/저장해서/출력하는 cycle을 기존처럼 [sender.tag]을 사용해서 한번에 끝내고 싶은데 어떻게 적용해볼까?
→ (1차시도) 초반에 userDefaults 사용시, 데이터 형식을 object로 주고 코드 끝에 'as? [Int] ?? [Int]()' 혹은 '?? [0, 0, 0, 0, 0, 0, 0, 0, 0]' 이렇게 직접 타입을 정해주려고 했다.
(말이 되는지는 모르겠지만) 역시나 뒤에가니 데이터 타입 Any 때문에 골치가 아파졌다.
→ (2차시도) 데이터 타입을 array로 해보자! 했지만 위에 ① 부분이랑 함께 고민하다가
굳이 array로 해야하나? 어차피 key를 기준으로 데이터를 관리하는거니까 굳이 array에 집착할 필요가 없음을 깨닫고 깔끔하게 Int로 가기로 했다.
→ (3차시도) 데이터를 가져올때 userDefaults.standard.integer로 가져오고, 키값에 "emotion\([sender.tag])"를 넣어서 돌렸다! 성공!
// MARK: - 감정버튼 클릭시 로직
@IBAction func buttonTapped(_ sender: UIButton) {
// 기존 감정 데이터 가져오기
let currentValue = defaults.integer(forKey: "emotion\([sender.tag])") // 고민포인트(2)
// 감정별 클릭수 증가
let updateValue = currentValue + 1 // 고민포인트(1)
// 새로운 감정수 배열값 저장
defaults.set(updateValue, forKey: "emotion\([sender.tag])")
// 전체 감정숫자 출력
emotionLabels[sender.tag].text = #"\#(emotionDataArray[sender.tag]) \#(defaults.integer(forKey: "emotion\([sender.tag])"))"#
}
- 감정일기 카운트를 리셋해보기
→ 감정일기 카운트를 removeObject로 전체삭제 해준 후, 초기화된 상태를 또다시 가져와서 저장해준다음 출력해야 하나 싶었다.
그래서 '전체삭제~초기화 상태 출력' 사이에 데이터 가져오고&저장해주는 단계를 넣어서도 돌려보고, 빼고도 돌렸는데 화면상 기능은 동일했다.
다시 생각해보니 리셋상태를 저장해야 다음실행 때 깔끔한 상태가 나올 수 있는거니까 아래처럼 마무리했다.
// MARK: - 감정 수 저장기록 초기화하기
@IBAction func removeAllButtonTapped(_ sender: UIButton) {
for i in 0...(emotionArray.count - 1) {
// 삭제하고
defaults.removeObject(forKey: "emotion\([i])")
// 삭제한 상태를 가져와서 저장하고
let currentValue = defaults.integer(forKey: "emotion\([i])")
defaults.set(currentValue, forKey: "emotion\([i])")
// 전체 감정숫자 출력
emotionLabels[i].text = #"\#(emotionDataArray[i]) \#(defaults.integer(forKey: "emotion\([i])"))"#
}
}
마무리
코드짤때는 어떻게 구성해서 엮어야 하나 엄청 고민하고, 개념 찾아보면서 온갖 방법으로 다해보는데
막상 성공하고나서 완성된 코드는 심플해서 약간 허무하다
다른 사람들한테는 간단한 로직인데 나만 혼자 낑낑대면서 하는 것 같아 걱정도 되지만
꾸준히 하다보면 잘하게 되겠지~
고민하다가 문제가 풀리는 순간이 재밌기도 하다.
다음에 userDefaults 쓸일 있으면 오늘보다는 잘할 것 같다!
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] 2022.07.18 (SeSAC iOS) (0) | 2022.07.18 |
---|---|
[TIL] 2022.07.16~17 (SeSAC iOS) (0) | 2022.07.17 |
[TIL] 2022.07.14 (SeSAC iOS) (0) | 2022.07.14 |
[TIL] 2022.07.13 (SeSAC iOS) (0) | 2022.07.13 |
[TIL] 2022.07.12 (SeSAC iOS) (0) | 2022.07.12 |