Swift Academy · Ders

Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler

Widget içeriğini zaman içinde sağlayın.

2. ders / 413 adım

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 policy

TimelineProvider'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
_ = policy

Gelecekteki 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"
_ = budget

Yapı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"
_ = configurable

Sağ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"
_ = summary

Hızlı Kontrol

Placeholder yöntemine getirilen kısıtlamayı hatırlayın.

Özet

Timeline sağlayıcılarını öğrendiniz:

  • placeholder anında sahte veri döndürür; getSnapshot tek bir entry döndürür (isPreview durumunda örnek veri); getTimeline ise gelecekteki entry'leri ve bir policy döndürür.
  • Yeniden yükleme policy'leri .atEnd, .after(date) veya .never değ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ı AppIntentTimelineProvider kullanır.
Başlamak ücretsiz

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

  1. WidgetKit Widget'ı Oluşturma
  2. Zaman Çizelgesi Sağlayıcıları ve Anlık Görüntüler
  3. Uygulama Uzantılarına Genel Bakış
  4. Uygulama Niyetleri ve Kestirmeler
← Swift Academy Sayfasına Dön