1. 최소 일주일, 혹은 한달 간의 걸음수 데이터를 가져와야 한다.
  2. 매일 접속을 하지않고, 갑자기 접속했을 때는 어떻게 데이트를 가져올까?
    1. 무조건 모든 데이터를 가져올 수도 있지만, realm에 저장을 하기에는 쫌..그러타.

우선 마지막 접속 일을 저장하는 유저디폴트를 멤버를 만들었다.

메인 뷰에 닿으면, 그날 날짜를 저장한다. (시간은 필요없음)


func getWeekTotalStepCounts() {
        print("main",#function)
        
        //기준점: 마지막접속일
        
        //오늘, 새벽 2시부터 내일 새벽 2시까지
        let year = calendar.component(.year, from: today)
        let month = calendar.component(.month, from: today)
        let day = calendar.component(.day, from: today)
        
        let dateComponents = DateComponents(year: year, month: month, day: day, hour: resetHour, minute: resetMinute)
        let endDate = calendar.date(from: dateComponents) //today
        let startDate = calendar.date(byAdding: .day, value: -6, to: endDate!)
        var totalCount = 0.0
        print(today)
        print(startDate!, endDate!)

Untitled

IMG_1229.jpg

IMG_1228.jpg

리셋시간을 새벽 2시로 설정했을 때 오늘은 제외한 6일 간의 기록을 새벽 2시 기준으로 가져온다.

아아..........................

데이트포매터와 싸우고,,, 일, 일주일전, 이번주, 이번달 등의 정보를 구할 때 반복되는 코드가 많아서 Date+Extension으로 뺐다.

(그리고 무한오류 겪기)

// Date+Extension
import UIKit
extension Date {
    

    var year: Int {
        return Calendar.current.component(.year, from: self)
    }
    
    var month: Int {
        return Calendar.current.component(.month, from: self)
    }
    
    var day: Int {
        return Calendar.current.component(.day, from: self)
    }
    
    var weekday: Int {
        return Calendar.current.component(.weekday, from: self)
    }
    
    var hour: Int {
        return Calendar.current.component(.hour, from: self)
    }
    var minute: Int {
        return Calendar.current.component(.minute, from: self)
    }
    
    func getPinDate(startDay: Int) -> Date {
        
        let dateComponents = DateComponents(year: self.year, month: self.month, day: self.day, hour: UserDefaults.standard.resetTime!.hour, minute: UserDefaults.standard.resetTime!.minute)
        let pinDate = Calendar.current.date(from: dateComponents)
        
        return pinDate!
    }
    
    func getPinDate() -> Date {
        
        let dateComponents = DateComponents(year: self.year, month: self.month, day: self.day, hour: UserDefaults.standard.resetTime!.hour, minute: UserDefaults.standard.resetTime!.minute)
        let pinDate = Calendar.current.date(from: dateComponents)
        
        return pinDate!
    }
    
}

DispatchQueue.global().sync를 이용해서 순차적으로 코드가 실행되기를 바랐지만.. 아직 제대로 이해하지 못해서 인지 여러 블로그에 있는 걸 따라해도 순서대로 실행이 되지 않는 느낌이었다..그래서 어느정도 포기..

나중에 더 공부해야겠다.