コードはSwiftUIとCoreDataを用いて日次スケジュールのアプリを作成しています。以下は各行の解説です:
import SwiftUI
import CoreData
SwiftUI(UI作成のためのフレームワーク)とCoreData(永続的なデータの格納と取得のためのフレームワーク)をインポートします。
class ObservableSchedule: ObservableObject {
@Published var schedule: DailySchedule
init(schedule: DailySchedule) {
self.schedule = schedule
}
}
DailySchedule
のインスタンスをラップするオブザーバブルオブジェクト。@Published
アノテーションを使用して、schedule
プロパティが変更されたときにビューを自動的に更新することを指示します。
class SchedulesStore: ObservableObject {
@Published var fetchedEntries: [DailySchedule] = []
}
フェッチされたDailySchedule
エントリを保存するためのオブジェクト。同じく、エントリが変更されたときにビューの更新をトリガする@Published
アノテーションが付けられています。
struct ScheduleView: View {
@Environment(\.managedObjectContext) private var managedObjectContext
Core DataのNSManagedObjectContext
にアクセスするためのプロパティを宣言します。このコンテキストはデータのフェッチ、保存、削除を行うために使用されます。
@State private var selectedDate: Date = Date()
選択された日付を保持するためのプロパティ。デフォルトは現在の日付です。
@StateObject private var schedulesStore = SchedulesStore()
フェッチされたスケジュールエントリを保存するためのオブジェクトを作成します。
private var initialScrollPosition: Int {
ビューが最初に表示されたときのスクロール位置を計算するためのプロパティ。現在の時刻に基づいています。
以下の部分は主要なUI部分です。基本的にはスクロール可能なリストを表示し、それぞれのエントリを表示します。
var body: some View {
ビューの本体を定義します。
NavigationView {
ナビゲーションビューを開始します。これにより、ナビゲーションバーと画面遷移が可能になります。
… [略] …
以下のrefreshData()
メソッドは、選択された日付に基づいてDailySchedule
エントリをフェッチするためのものです。
private func refreshData() {
選択された日付に関連するスケジュールエントリをフェッチまたは生成するメソッド。
private func generateDailySchedules(context: NSManagedObjectContext) -> [DailySchedule] {
新しいデフォルトのスケジュールエントリのリストを生成します。
struct ScheduleEntryRow: View {
各スケジュールエントリを表示するためのビューを定義します。
extension String {
文字列の拡張で、特定のフォーマットの時間文字列をDate
オブジェクトに変換するヘルパーメソッドを提供します。
全体的に、このコードは日次スケジュールのアプリを作成するためのもので、ユーザーは日付を選択してその日のスケジュールを表示、編集、保存、削除することができます。
Comments