टाइमलाइन प्रदाता और स्नैपशॉट
समय के साथ विजेट की सामग्री उपलब्ध कराएँ।
टाइमलाइन प्रदाता और स्नैपशॉट, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रोवाइडर का काम
विजेट लगातार स्वयं अपडेट नहीं होता। इसके बजाय, एक TimelineProvider WidgetKit को पहले से रेंडर की गई entries का शेड्यूल देता है और सिस्टम प्रत्येक entry को सही समय पर दिखाता है। provider तीन सवालों का जवाब देता है: प्लेसहोल्डर, स्नैपशॉट और टाइमलाइन।
import WidgetKit
// TimelineProvider supplies:
// placeholder(in:) -> instant skeleton
// getSnapshot(in:) -> one entry for previews
// getTimeline(in:) -> future entries + refresh policyTimelineProvider के अनुरूप बनना
एक provider संबद्ध Entry प्रकार के साथ TimelineProvider के अनुरूप होता है। आपको तीन मेथड लागू करने होते हैं; प्रत्येक आपको एक Context देता है, जो family और यह बताता है कि वह प्रीव्यू है या नहीं।
import WidgetKit
struct WeatherProvider: TimelineProvider {
typealias Entry = WeatherEntry
func placeholder(in context: Context) -> WeatherEntry {
WeatherEntry(date: Date(),
temperature: 20, condition: "Sunny")
}
// getSnapshot and getTimeline follow
}प्लेसहोल्डर
placeholder(in:) को प्रतिनिधि डमी डेटा के साथ तुरंत लौटना चाहिए। वास्तविक विजेट लोड होने के दौरान और विजेट गैलरी में सिस्टम इसे धुंधले किए गए ढाँचे के रूप में दिखाता है। यहाँ नेटवर्क या डिस्क से जुड़ा कोई काम कभी न कीजिए।
import WidgetKit
func placeholder(in context: Context) -> WeatherEntry {
// Synchronous, fake data, no I/O
WeatherEntry(date: Date(),
temperature: 0, condition: "--")
}स्नैपशॉट
getSnapshot विजेट गैलरी के प्रीव्यू जैसी अस्थायी स्थितियों के लिए एक entry उपलब्ध कराता है। इसे तुरंत लौटना चाहिए। जब context.isPreview true हो, तो धीमी फ़ेचिंग के बजाय नमूना डेटा इस्तेमाल कीजिए, ताकि गैलरी तुरंत तैयार महसूस हो।
import WidgetKit
func getSnapshot(
in context: Context,
completion: @escaping (WeatherEntry) -> Void) {
if context.isPreview {
completion(WeatherEntry(date: Date(),
temperature: 22, condition: "Clear"))
} else {
completion(currentEntry())
}
}टाइमलाइन
getTimeline इसका मुख्य भाग है: आप भविष्य की entries का एक ऐरे बनाते हैं और उन्हें Timeline में एक रीफ़्रेश नीति के साथ पैक करते हैं। सिस्टम प्रत्येक entry को उसकी date पर रेंडर करता है और फिर नीति के अनुसार नई टाइमलाइन माँगता है।
import WidgetKit
func getTimeline(
in context: Context,
completion: @escaping (Timeline<WeatherEntry>) -> Void) {
let entries = buildEntries()
let timeline = Timeline(
entries: entries, policy: .atEnd)
completion(timeline)
}रीफ़्रेश नीतियाँ
रीलोड नीति यह नियंत्रित करती है कि WidgetKit अगली टाइमलाइन कब माँगे: अंतिम entry की date के बाद .atEnd, किसी विशेष समय पर .after(date), या आपके मैन्युअल रीलोड करने तक .never। सिस्टम इनके लिए budget तय करता है, इसलिए हर सेकंड अपडेट की अपेक्षा न कीजिए।
import WidgetKit
// .atEnd -> reload after final entry
// .after(someDate) -> reload at a chosen time
// .never -> only on manual reloadTimelines
let policy = TimelineReloadPolicy.atEnd
_ = policyभविष्य की entries बनाना
एक सामान्य तरीका यह है कि अगले कई घंटों की पहले से गणना कर ली जाए, ताकि हर बार आपके कोड को सक्रिय किए बिना विजेट अपडेट हो सके। now से भविष्य तक के अंतरालों पर entries जनरेट कीजिए, जिनमें प्रत्येक क्षण का डेटा हो।
import WidgetKit
import Foundation
func hourlyEntries() -> [WeatherEntry] {
var entries: [WeatherEntry] = []
let now = Date()
for hour in 0..<6 {
let date = Calendar.current.date(
byAdding: .hour, value: hour, to: now)!
entries.append(WeatherEntry(date: date,
temperature: 18 + hour, condition: "Sunny"))
}
return entries
}टाइमलाइन में असिंक्रोनस डेटा
यदि आपको नेटवर्क से डेटा प्राप्त करना हो, तो completion कॉल करने से पहले ऐसा कीजिए। असिंक्रोनस काम को एक Task में लपेटिए और डेटा आने के बाद ही पूरा कीजिए। इसे तेज़ रखिए—providers के पास बहुत कम समय का budget होता है।
import WidgetKit
func getTimeline(
in context: Context,
completion: @escaping (Timeline<WeatherEntry>) -> Void) {
Task {
let entry = await fetchForecast()
let timeline = Timeline(
entries: [entry], policy: .after(
Date().addingTimeInterval(3600)))
completion(timeline)
}
}
func fetchForecast() async -> WeatherEntry {
WeatherEntry(date: Date(),
temperature: 21, condition: "Cloudy")
}प्रासंगिकता और बजट
बैटरी बचाने के लिए WidgetKit प्रतिदिन रीफ़्रेश होने की आवृत्ति सीमित करता है। आप बार-बार होने वाले अपडेट को बाध्य नहीं कर सकते। प्रत्येक टाइमलाइन में कई entries दीजिए और उचित रीलोड समय चुनिए; ऐप से reloadTimelines का उपयोग केवल महत्वपूर्ण डेटा बदलावों पर कीजिए।
import WidgetKit
// The system, not you, decides exact refresh timing.
// Strategy: pre-bake multiple entries + a sensible policy
// + app-driven reloads on real changes.
let budget = "refreshes are budgeted by the OS"
_ = budgetकॉन्फ़िगर किए जा सकने वाले विजेट का provider
AppIntentConfiguration विजेट के लिए इसके बजाय AppIntentTimelineProvider का उपयोग कीजिए। इसके मेथड उपयोगकर्ता के कॉन्फ़िगर किए गए इंटेंट को प्राप्त करते हैं, इसलिए आप चुने गए विकल्प, जैसे चयनित शहर या खाते, के लिए डेटा प्राप्त कर सकते हैं।
import WidgetKit
// AppIntentTimelineProvider adds the configuration:
// func timeline(for configuration: MyIntent,
// in context: Context)
// async -> Timeline<Entry>
let configurable = "intent-aware provider"
_ = configurableprovider को एक साथ जोड़ना
एक पूर्ण provider में तुरंत मिलने वाला प्लेसहोल्डर, प्रीव्यू को समझने वाला तेज़ स्नैपशॉट और उचित रीलोड नीति वाली पहले से तैयार entries की टाइमलाइन होती है—इससे विजेट सिस्टम के budget के भीतर ताज़ा बना रहता है।
import WidgetKit
// 1. placeholder -> instant dummy
// 2. getSnapshot -> sample when isPreview, else current
// 3. getTimeline -> [entries] + .atEnd or .after
let summary = "three methods, one current widget"
_ = summaryत्वरित जाँच
प्लेसहोल्डर मेथड पर लगी सीमा याद कीजिए।
पुनरावलोकन
आपने टाइमलाइन providers सीखे:
placeholderतुरंत डमी डेटा लौटाता है;getSnapshotएक entry लौटाता है (isPreviewहोने पर नमूना डेटा);getTimelineभविष्य की entries और एक नीति लौटाता है।- रीलोड नीतियाँ
.atEnd,.after(date)या.neverहोती हैं; OS वास्तविक रीफ़्रेश के लिए budget तय करता है। - कई entries पहले से तैयार कीजिए; पूरा करने से पहले असिंक्रोनस फ़ेच कीजिए।
- कॉन्फ़िगर किए जा सकने वाले विजेट
AppIntentTimelineProviderका उपयोग करते हैं।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “टाइमलाइन प्रदाता और स्नैपशॉट” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “टाइमलाइन प्रदाता और स्नैपशॉट” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“टाइमलाइन प्रदाता और स्नैपशॉट” में मैं क्या सीखूँगा?
समय के साथ विजेट की सामग्री उपलब्ध कराएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“टाइमलाइन प्रदाता और स्नैपशॉट” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- WidgetKit विजेट बनाना
- टाइमलाइन प्रदाता और स्नैपशॉट
- ऐप एक्सटेंशन का अवलोकन
- ऐप इंटेंट और शॉर्टकट