티스토리 뷰

번들 밑에 있는 파일에 들어가보겠습니다.

 

import WidgetKit
import SwiftUI

struct Provider: TimelineProvider {
    func placeholder(in context: Context) -> SimpleEntry {
        SimpleEntry(date: Date())
    }

    func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
        let entry = SimpleEntry(date: Date())
        completion(entry)
    }

    func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
        var entries: [SimpleEntry] = []

        // Generate a timeline consisting of five entries an hour apart, starting from the current date.
        let currentDate = Date()
        for hourOffset in 0 ..< 5 {
            let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
            let entry = SimpleEntry(date: entryDate)
            entries.append(entry)
        }

        let timeline = Timeline(entries: entries, policy: .atEnd)
        completion(timeline)
    }
}

struct SimpleEntry: TimelineEntry {
    let date: Date
}

struct widgetWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        Text(entry.date, style: .time)
    }
}

struct widgetWidget: Widget {
    let kind: String = "widgetWidget"

    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            widgetWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
        .supportedFamilies([.systemSmall,.systemMedium,.systemLarge,.accessoryCircular,.accessoryInline,.accessoryRectangular])
    }
}

struct widgetWidget_Previews: PreviewProvider {
    static var previews: some View {
        widgetWidgetEntryView(entry: SimpleEntry(date: Date()))
            .previewContext(WidgetPreviewContext(family: .accessoryRectangular))
    }
}

구조체가 크게 Provider, SimpleEntry, widgetWidgetEntryView, widgetWidget, widgetWidget_Previews 이렇게 있는데 각각 하나씩 분석해보겠습니다.

  • TimeLineProvider (Provider)
  • 위젯에서 가장 중요한 시간에 따른 앱 업데이트 정책 정의
  • Entry (SimpleEntry)
  • 타임라인에 들어갈 모델
  • View (widgetWidgetEntryView)
  • 그려질 뷰
  • Widget (widgetWidget)
  • 위젯
  • PreviewProvider (widgetWidget_Previews)
  • SwiftUI의 강점인 preview 기능을 쓸때 넣을 고정적인 데이터를 넣고 선언하는 공간입니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함