기어가더라도 제대로

[SwiftUI-기초] Date, DateComponents 본문

SwiftUI - 기초

[SwiftUI-기초] Date, DateComponents

Damagucci-juice 2022. 10. 19. 22:37
  • 달력 개념을 직접 구현하기는 어렵고 힘들다. 
  • Apple 구현해 놓은 달력을 쓰기만 하면 된다.(물론 가져다 쓰는 것도 쉽진 않다.)
  • 그래서 Apple 이 만들어 놓은 달력 이용 api - Date, DateComponents 를 정리해볼까 한다. 

조금 투박하게 내일을 구하는 방법

let now = Date.now
let tomorrow = Date.now.addingTimeInterval(86400)
let range = now...tomorrow
  • 86400 은 하루의 시간초이다. 
  • 우리는 모든 날에 대해서 이런 계산을 거칠 수는 없다. 
  • 번거롭기도 하고.. 좀더 깔끔한 방법이 있진 않을까?

특정 요소 쓰기

var components = DateComponents()
components.hour = 8
components.minute = 0
let date = Calendar.current.date(from: components)
  • DateComponents 라는 것을 친히 마련해주셨다. 
    • DateComponents 객체 생성
    • 그 객체의 프로퍼티를 설정
    • DateCompoenents를 바탕으로 원하는 Date 를 만들어내기
  • 일정한 순서를 따른다. 
  • 이 때, 컴포넌트에 어떤 값을 넣는지는 본인의 마음이다. 
  • component에 규격 외 값을 넣는 경우가 있어서 에러를 뱉을 가능성이 있다.
    " ?? Date.now " 를 해주는 것이 옵셔널 값을 벗기기에 수월하다. 
let date = Calendar.current.date(from: components)  ?? Date.now

특정 요소 읽기 

let components = Calendar.current.dateComponents([.hour, .minute], from: someDate)
let hour = components.hour ?? 0
let minute = components.minute ?? 0
  • 예를들어 우리가 DatePicker 를 이용해서 얻은 정보에서 hour, minute 값만 빼낸다면 이렇게 설정할 수 있다. 
  • 마찬가지로 요소에서 error 가능성이 존재하기 때문에 nil coalescing 하는 것이 좋다. 

Text 에 표시

// 시간, 분 표시
Text(Date.now, format: .dateTime.hour().minute())

// 날, 월, 년
Text(Date.now, format: .dateTime.day().month().year())
  • 영미권에선 좀 다른 순서로 표시하는데, 사용자 지역의 선호로 보여준다고한다. 
    • day - month - year
    • month - day - year 
    • 여도 우리나라에선 year - month - day ??..
Text(Date.now.formatted(date: .long, time: .shortened))
  • 이런 방법도 있다. 

다양한 방법들이 있는데 모든 방법을 숙지하긴 어렵고, 이 정도 기본을 숙지한 후에, 필요하면 그 때 학습을 하는 것이 좋겠다. 

'SwiftUI - 기초' 카테고리의 다른 글

[SwiftUI-기초] Bundle 에서 Data 가져오기  (0) 2022.10.23
[SwiftUI-기초] List - style, color  (0) 2022.10.22
[SwiftUI-기초] DatePicker  (1) 2022.10.18
[SwiftUI-기초] Stepper  (0) 2022.10.17
[SwiftUI-기초] Custom Container  (1) 2022.10.16
Comments