Перед сохранением записи в SwiftData я проверяю, существует ли такое имя. Он отлично работает в режиме добавления, но не работает в режиме редактирования. Это связано с тем, что в режиме редактирования выполняется то же самое условие, которое блокирует обновление записи.
func saveCategory() {
if categories.contains(where: { $0.name == category.name }) {
DispatchQueue.main.async {
toast = Toast(style: .error, message: "Category already exists.", width: 400)
}
} else {
modelContext.insert(category)
try! modelContext.save()
toast = Toast(style: .success, message: "Category Saved.", width: 210)
let task = DispatchWorkItem {
dismiss()
}
DispatchQueue.main.asyncAfter(deadline: .now() + (toast?.duration ?? 1), execute: task)
}
}
< /code>
Модель категории: < /p>
@Model
final class Category {
@Attribute(.unique) var name: String
....
}
< /code>
Один из способов, которым я подумал об этом, - сохранить переменную для режима редактирования и передать ее из предыдущего представления. Но я не думаю, что это лучший способ, и, честно говоря, не сработает.
Есть ли лучший способ? Могу ли я использовать уникальный атрибут и как?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -edit-mode