Section 5/131 menit
5. @ObservationIgnored — Opt-out dari Tracking
5. @ObservationIgnored — Opt-out dari Tracking
Property yang diberi @ObservationIgnored tidak akan di-track — perubahan pada property ini tidak akan men-trigger re-render View manapun.
swift
@Observable
final class DataViewModel {
// Di-track — perubahan memicu re-render
var visibleItems: [Item] = []
var isLoading: Bool = false
// Tidak di-track — perubahan tidak memicu re-render apapun.
// Gunakan untuk: internal cache, logging, metadata, dependencies eksternal.
@ObservationIgnored
private var internalCache: [String: Item] = [:]
@ObservationIgnored
private var networkService: NetworkService = NetworkService()
@ObservationIgnored
var lastRefreshDate: Date? = nil // metadata yang tidak perlu tampil di UI
// Computed property yang HANYA mengakses @ObservationIgnored property
// → tidak men-trigger observation apapun.
var cacheSize: Int {
internalCache.count // mengakses ignored property — tidak di-track
}
func refresh() async {
isLoading = true // tracked — View akan update
let items = await networkService.fetchItems() // ignored property — tidak trigger observation
internalCache = Dictionary(uniqueKeysWithValues: items.map { ($0.id, $0) }) // ignored
visibleItems = items // tracked — View akan update
lastRefreshDate = Date() // ignored — View tidak di-render ulang
isLoading = false // tracked — View akan update
}
}