セクション 104
保管に監視可能なオブジェクトを使用
ユーザがどの特定のランドマークをお気に入りにするかを制御できるようにするには、最初にランドマークデータを 監視可能なオブジェクト に保管します。
監視可能なオブジェクトは、SwiftUI の環境内の保管からのビューに結束できるデータのカスタムオブジェクトです。SwiftUI は、ビューに影響を与える可能性のある監視可能なオブジェクトへの変更を全て監視し、変更後に正しいバージョンのビューを表示します。
ステップ 1
プロジェクトのナビゲーションペインで、ModelData.swift を選択します。
    ModelData.swift
- import Foundation
- var landmarks: [Landmark] = load("landmarkData.json")
- func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
- }
ステップ 2
Combine フレームワークの ObservableObject プロトコルに準拠する新しいモデルの型を宣言します。
SwiftUI は、監視可能なオブジェクトに subscribe し、データが変更されたときに更新が必要なビューを全て更新します。
    ModelData.swift
- import Foundation
- import Combine
- final class ModelData: ObservableObject {
- }
ステップ 3
landmark 配列をモデルの中に移動します。
    ModelData.swift
- final class ModelData: ObservableObject {
var landmarks: [Landmark] = load("landmarkData.json")
- }
監視可能なオブジェクトは、それを subscribe する物が変更を取得できるように、そのデータへの変更を公開する必要があります。
ステップ 4
@Published 属性を landmarks 配列に追加します。
    ModelData.swift
- final class ModelData: ObservableObject {
@
Published var landmarks: [
Landmark] = load(
"landmarkData.json")
- }