MyGumiTimer

Woozoo·2023년 1월 26일
0

개인프로젝트

목록 보기
5/12

CountTimeView

SwiftUI에서 Timer클래스를 이용하는 방법은 콤바인을 사용하는 방식이 있다.

Timer를 publish해주고 원하는 대상에 .onReceive해서 변화가 일어나게 해주면 됨

🤔
vm내부에 timeLabel을 만드는 과정에서 computedProperty로 선언해줬는데
@Published가 붙으면 안된다는 에러가 발생했음
그래서 프로퍼티래퍼는 없애고 그냥 var로 선언했는데도 UI가 업데이트 되는 걸 볼 수 있음
왜 그럴까?!🤔
@Published 해준 timeModel의 값이 바껴서 그런것 같기도..

타이머 구현 완료!

우여곡절끝에 타이머 구현 성공했다!
뷰모델로 모델이랑 로직 다 빼줬는데 정리하고 나니까 더 많은 뷰들을 만든 다음에 한번에 정리할 걸 그랬나.. 싶기도함


뷰모델을 이렇게 구성해줬다

TimeList 뷰

CountTimeView에서 stop 버튼을 누르게 되면 공부한 시간들이 저장되게 만들 예정

Grid로 조금 예쁘게 꾸며주고 싶은 마음이 있지만 우선은 로직 자체에 집중을 해야할 것 같다.

그래서!

List로 먼저 구현해봄

리스트로 보여주려고 하다보니 date 프로퍼티도 Model에 필요할 것 같다는 생각이 든다
임시로 Date() 만들어서 넣어주기로함

그리고 월별로 섹션을 나눠줘야할 거 같아서 Section도 구성해줌

ForEach에 Int range로 넣어줬는데 나중엔 저장된 타임모델들을 불러와서 Date의 월을 기준으로 하나의 섹션을 구성해줘야할 거 같음

extension TimeListView {
    
    private func formattedSectionDate(date: Date) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = "yy년 M월의 기록"
        
        return formatter.string(from: date)
    }
    
    private func formattedDate(date: Date) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = "dd일 hh시 mm분 시작"
        
        return formatter.string(from: date)
    }
}

date formatter를 사용해서 스트링으로 바꿔주는 메소드를 구성했음


지금 문제를 발생하는 부분이 CountTimeView에서 Date를 전달하는 과정을 구현해야하는데
Stop이 될 때의 Date로 뷰모델의 Date가 고정이 되는 걸 볼 수 있음

Date항목은 Start 버튼을 누르는 시점에서 초기화 되어야한다!!

fullyStopChecking이라는 Bool 값을 만들고 start되는 시점에서 한번 체크해주게 조건문 만들어줌


오케이!!!


TabView 구성

메인이 될 뷰를 ContentView로 만들고 TabView 구성해줌

그리고 이전에 만든 뷰들이 잘못 되어 있다는 걸 깨달아버림

ContentView에서 @StateObject로 뷰모델을 만들어주고 이 뷰모델 자체를
하위뷰에 넘겨줘야함


이렇게!

TimeListView

에 들어갈 데이터들을 조금 sort 할 필요성을 느낌
월별로 섹션을 나눠주고, 보기 편하게 구성해줘야 될 것 같다

profile
우주형

0개의 댓글