Исходя из PostgreSQL/Django, я привык к автоматическим меткам времени createAt и updateAt в таблицах моей базы данных. Я хотел бы реализовать аналогичную функциональность в SwiftData, но я не уверен, что это идиоматический подход или есть лучшие альтернативы (например, протокол истории).
Вот минимальный пример того, что я пытаюсь реализовать. достичь:
@Model
class Note {
var title: String
var content: String
var createdAt: Date
var updatedAt: Date
init(title: String, content: String) {
self.title = title
self.content = content
self.createdAt = Date()
self.updatedAt = Date()
}
}
У меня есть несколько конкретных вопросов:
Правильный ли это подход для отслеживания времени создания/изменения в SwiftData или есть более идиоматический способ?
Если это правильный подход, как я могу сделать обновление UpdateAt автоматически, когда какое-либо свойство изменения? В настоящее время мне нужно будет вручную установить его в каждом представлении:
struct EditNoteView: View {
@Environment(\.modelContext) private var modelContext
@Bindable var note: Note
var body: some View {
TextField("Title", text: $note.title)
.onChange(of: note.title) {
note.updatedAt = Date() // Need to do this manually
try? modelContext.save()
}
}
}
Как это работает с функцией автосохранения SwiftData? Если SwiftData автоматически сохраняет изменения, как я могу гарантировать, что updateAt всегда актуален, не устанавливая его явно?
Следует ли мне вместо этого рассмотреть возможность использования протокола History? Если да, то как будет выглядеть эта реализация?
Я искал сеансы и документацию WWDC, но не нашел четких указаний по отслеживанию временных меток. шаблоны в SwiftData.
Любая помощь или рекомендации по передовому опыту будут оценены по достоинству! Предпочтительно подход, который работает как в iOS 17, так и в iOS 18.
Исходя из PostgreSQL/Django, я привык к автоматическим меткам времени createAt и updateAt в таблицах моей базы данных. Я хотел бы реализовать аналогичную функциональность в SwiftData, но я не уверен, что это идиоматический подход или есть лучшие альтернативы (например, протокол истории). Вот минимальный пример того, что я пытаюсь реализовать. достичь: [code]@Model class Note { var title: String var content: String var createdAt: Date var updatedAt: Date
init(title: String, content: String) { self.title = title self.content = content self.createdAt = Date() self.updatedAt = Date() } } [/code] У меня есть несколько конкретных вопросов: [list] [*]Правильный ли это подход для отслеживания времени создания/изменения в SwiftData или есть более идиоматический способ?
[*]Если это правильный подход, как я могу сделать обновление UpdateAt автоматически, когда какое-либо свойство изменения? В настоящее время мне нужно будет вручную установить его в каждом представлении:
[/list] [code]struct EditNoteView: View { @Environment(\.modelContext) private var modelContext @Bindable var note: Note
var body: some View { TextField("Title", text: $note.title) .onChange(of: note.title) { note.updatedAt = Date() // Need to do this manually try? modelContext.save() } } } [/code] [list] [*]Как это работает с функцией автосохранения SwiftData? Если SwiftData автоматически сохраняет изменения, как я могу гарантировать, что updateAt всегда актуален, не устанавливая его явно? Следует ли мне вместо этого рассмотреть возможность использования протокола History? Если да, то как будет выглядеть эта реализация?
[*]Я искал сеансы и документацию WWDC, но не нашел четких указаний по отслеживанию временных меток. шаблоны в SwiftData. Любая помощь или рекомендации по передовому опыту будут оценены по достоинству! Предпочтительно подход, который работает как в iOS 17, так и в iOS 18.