Skip to content

Instantly share code, notes, and snippets.

View colinfwren's full-sized avatar

Colin Wren colinfwren

View GitHub Profile
@colinfwren
colinfwren / ApproachModel.swift
Created November 19, 2023 21:32
Date Test Approach 3 Data Model
import Foundation
import SwiftData
@Model
final class ApproachModel {
var title: String
var date: Date
var granularity: DateGranularity
var year: Int {
@colinfwren
colinfwren / fetchMonthData.swift
Created November 19, 2023 21:29
Date Test Approach 2 fetchMonthData and fetchYearData
func fetchMonthData() {
do {
let calendar = Calendar.init(identifier: .iso8601)
let date = calendar.date(from: DateComponents(year: year, month: month: day: 1))!
let weekOfMonth = calendar.component(.weekOfMonth, from: date)
var predicate: Predicate<ApproachModel>
if (weekOfMonth == 0) {
let weekOfYear = calendar.component(.weekOfYear, from: date)
predicate = #Predicate { todo in
((todo.year == year && todo.month == month) || (todo.week == weekOfYear)) && todo.shownInMonth == true
@colinfwren
colinfwren / fetchDayData.swift
Created November 19, 2023 21:26
Date Test Approach 2 fetchDayData
func fetchDayData() {
do {
let descriptor = FetchDescriptor<ApproachModel>(predicate: #Predicate { todo in
todo.year == year && todo.month == month && todo.day == day && todo.shownInDay == true
})
todos = try modelContext.fetch(descriptor)
} catch {
print("Failed to fetch day data")
}
}
@colinfwren
colinfwren / ApproachTodoListViewModel.swift
Created November 19, 2023 21:25
Date Test Approach 2 View Model
class ApproachTodoListViewModel: Identifiable {
var modelContext: ModelContext
var title: String
var todos = [ApproachModel]()
var granularity: DateGranularity
var year: Int
var month: Int?
var week: Int?
var day: Int?
@colinfwren
colinfwren / ApproachModel.swift
Created November 19, 2023 21:24
Date Test Approach 2 Data Model
import Foundation
import SwiftData
@Model
final class ApproachModel {
var title: String
var year: Int
var month: Int? = nil
var week: Int? = nil
var day: Int? = nil
@colinfwren
colinfwren / fetchMonthData.swift
Created November 19, 2023 21:21
Date Test Approach 1 fetchMonthData
func fetchMonthData() {
do {
let descriptor = FetchDescriptor<ApproachModel>(predicate: #Predicate { todo in
((todo.startDate >= startDate && todo.startDate <= endDate) || (todo.endDate >= startDate && todo.endDate <= endDate)) && todo.shownInWeek == true
}, sortBy: [SortDescriptor(\.endDate)])
todos = try modelContext.fetch(descriptor)
} catch {
print("Failed to fetch month data")
}
}
@colinfwren
colinfwren / fetchWeekData.swift
Created November 19, 2023 21:19
Date Test Approach 1 fetchWeekData implementation
func fetchWeekData() {
do {
let descriptor = FetchDescriptor<ApproachModel>(predicate: #Predicate { todo in
todo.startDate >= startDate && todo.endDate <= endDate && todo.shownInWeek == true
}, sortBy: [SortDescriptor(\.endDate)])
todos = try modelContext.fetch(descriptor)
} catch {
print("Failed to fetch week data")
}
}
@colinfwren
colinfwren / ApproachTodoListViewModel.swift
Created November 19, 2023 21:18
Date Test Approach 1 ViewModel
class ApproachTodoListViewModel: Identifiable {
var modelContext: ModelContext
var title: String
var todos = [ApproachModel]()
var startDate: Date
var endDate: Date
var granularity: DateGranularity
// rest of the implementation
}
@colinfwren
colinfwren / ApproachModel.swift
Created November 19, 2023 21:16
Date Test Approach 1 Model
import Foundation
import SwiftData
@Model
final class ApproachModel {
var title: String
var startDate: Date
var endDate: Date
// rest of implementation
}
@colinfwren
colinfwren / ApproachModel.swift
Created November 19, 2023 21:15
Date Test Generic SwiftData Model
import Foundation
import SwiftData
@Model
final class ApproachModel {
var title: String
var shownInYear: Bool = true
var shownInMonth: Bool = true
var shownInWeek: Bool = true
var shownInDay: Bool = true