Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler
Widget içeriğini zaman içinde sağlayın.
Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Sağlayıcının Görevi
Bir araç takımı kendini sürekli güncellemez. Bunun yerine bir TimelineProvider, WidgetKit'e önceden oluşturulmuş entry'lerden oluşan bir zamanlama sunar ve sistem her birini doğru zamanda görüntüler. Sağlayıcı üç soruyu yanıtlar: placeholder, anlık görüntü ve timeline.
import WidgetKit
// TimelineProvider supplies:
// placeholder(in:) -> instant skeleton
// getSnapshot(in:) -> one entry for previews
// getTimeline(in:) -> future entries + refresh policyTimelineProvider'a Uyum Sağlama
Bir sağlayıcı, ilişkili bir Entry türüyle TimelineProvider'a uyar. Üç yöntemi uygularsınız; bu yöntemlerin her biri size family'yi ve bunun bir önizleme olup olmadığını açıklayan bir Context verir.
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
placeholder(in:), temsili sahte verilerle anında sonuç döndürmelidir. Sistem, gerçek araç takımı yüklenirken ve araç takımı galerisinde bunu üzeri gizlenmiş bir iskelet olarak gösterir. Burada hiçbir zaman ağ veya disk işlemi yapmayın.
import WidgetKit
func placeholder(in context: Context) -> WeatherEntry {
// Synchronous, fake data, no I/O
WeatherEntry(date: Date(),
temperature: 0, condition: "--")
}Anlık Görüntü
getSnapshot, araç takımı galerisi önizlemesi gibi geçici durumlar için tek bir entry sağlar. Hızlı sonuç döndürmelidir. context.isPreview değeri true olduğunda, galerinin anında açılması için yavaş bir veri alma işlemi yerine örnek veriler kullanın.
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())
}
}Timeline
getTimeline işin merkezidir: gelecekteki entry'lerden oluşan bir dizi oluşturur ve bunları bir yenileme policy'si ile Timeline içinde bir araya getirirsiniz. Sistem her entry'yi date değerinde işler, ardından policy'ye göre yeni bir timeline ister.
import WidgetKit
func getTimeline(
in context: Context,
completion: @escaping (Timeline<WeatherEntry>) -> Void) {
let entries = buildEntries()
let timeline = Timeline(
entries: entries, policy: .atEnd)
completion(timeline)
}Yenileme Policy'leri
Yeniden yükleme policy'si, WidgetKit'in bir sonraki timeline'ı ne zaman isteyeceğini denetler: son entry'nin date değerinden sonra .atEnd, belirli bir zamanda .after(date) veya elle yeniden yükleyene kadar .never. Sistem bu yenilemeler için bir budget ayırır; bu nedenle saniye saniye güncelleme beklemeyin.
import WidgetKit
// .atEnd -> reload after final entry
// .after(someDate) -> reload at a chosen time
// .never -> only on manual reloadTimelines
let policy = TimelineReloadPolicy.atEnd
_ = policyGelecekteki Entry'leri Oluşturma
Yaygın bir yaklaşım, araç takımının her seferinde kodunuzu uyandırmadan güncellenebilmesi için sonraki birkaç saati önceden hesaplamaktır. Şimdiden geleceğe uzanan aralıklarla entries oluşturun; her biri o ana ait verileri içersin.
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
}Timeline'da Asenkron Veri
Ağdan veri almanız gerekiyorsa bunu completion çağrısından önce yapın. Asenkron çalışmayı bir Task içine alın ve yalnızca veriler geldikten sonra tamamlayın. Hızlı tutun; sağlayıcıların sıkı bir zaman budget'ı vardır.
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")
}Önem ve Budget
WidgetKit, pili korumak için günlük yenileme sıklığını sınırlar. Sık güncellemeleri zorlayamazsınız. Her timeline için birkaç entry sağlayın ve makul bir yeniden yükleme zamanı seçin; uygulamadan reloadTimelines işlevini yalnızca anlamlı veri değişikliklerinde kullanın.
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"
_ = budgetYapılandırılabilir Araç Takımları için Sağlayıcı
Bir AppIntentConfiguration araç takımı için bunun yerine AppIntentTimelineProvider kullanın. Bu sağlayıcının yöntemleri, kullanıcının yapılandırdığı niyeti alır; böylece seçilen seçenek (seçilen şehir, hesap vb.) için veri alabilirsiniz.
import WidgetKit
// AppIntentTimelineProvider adds the configuration:
// func timeline(for configuration: MyIntent,
// in context: Context)
// async -> Timeline<Entry>
let configurable = "intent-aware provider"
_ = configurableSağlayıcıyı Bir Araya Getirme
Eksiksiz bir sağlayıcı; anında bir placeholder, önizlemenin farkında olan hızlı bir anlık görüntü ve uygun bir yeniden yükleme policy'sine sahip önceden hazırlanmış entry'lerden oluşan bir timeline sunar. Böylece araç takımı, sistemin budget sınırları içinde güncel kalır.
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"
_ = summaryHızlı Kontrol
Placeholder yöntemine getirilen kısıtlamayı hatırlayın.
Özet
Timeline sağlayıcılarını öğrendiniz:
placeholderanında sahte veri döndürür;getSnapshottek bir entry döndürür (isPreviewdurumunda örnek veri);getTimelineise gelecekteki entry'leri ve bir policy döndürür.- Yeniden yükleme policy'leri
.atEnd,.after(date)veya.neverdeğerleridir; gerçek yenilemeleri OS için ayrılan budget sınırlar. - Birden çok entry'yi önceden hazırlayın; asenkron veri alma işlemlerini tamamlamadan önce gerçekleştirin.
- Yapılandırılabilir araç takımları
AppIntentTimelineProviderkullanır.
Yapay zeka eğitmeniyle Swift öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 122
- Dersler
- 409
Sıkça Sorulan Sorular
“Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler” dersi ücretsiz mi?
Evet — “Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler” dersinde ne öğreneceğim?
Widget içeriğini zaman içinde sağlayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- WidgetKit Widget'ı Oluşturma
- Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler
- Uygulama Uzantılarına Genel Bakış
- Uygulama Niyetleri ve Kestirmeler