У меня есть модель SwiftData, указанная следующим образом в приложении SwiftUI:
Она работает так, как и ожидалось. Я могу добавить его в контейнер модели моего приложения следующим образом:
И смог создать, сохранить и извлечь данные, как и ожидалось.
Я создал функцию для удаления сохраненных данных:
Но компилятор выдает эту ошибку:
Я пытаюсь сделать это на основе документации, в которой указано, что для удаления всех экземпляров может быть предоставлена только модель:
Также эта статья Hacking with Swift делает то же самое кстати.
Это ошибка в Xcode или компиляторе Swift? Это вообще не имеет смысла по следующим причинам.
Я могу настроить свою модель следующим образом без каких-либо ошибок:
Таким образом, очевидно, что MyModel
соответствует PersistentModel
, но это не очищает ошибку.
В документации для ModelContainer
есть следующие инициализаторы:
Один из них явно принимает любой PersistentModel.Type
, а два других принимают Schema
, чья документация показывает инициализатор, который, как мне кажется, using, который также принимает любой PersistentModel.Type
:
В целом, похоже, что это может быть ошибкой, так как класс может быть явно помечен как PersistentModel
без ошибок, и он уже используется с функциями, которым требуется параметр PersistentModel
.
Что я могу с этим сделать?
Я нашел этот ответ примерно годичной давности, но ни одно из решений не кажется применимым. В одном из них упоминается ошибка, которая предположительно была исправлена. Я использую Xcode 15.4.
@Model
class MyModel
{
// Model information.
}
WindowGroup
{
ContentView()
}
.modelContainer(for: [MyModel.self])
func deleteData(modelContext: ModelContext)
{
modelContext.delete(MyModel.self)
}
Type 'MyModel.Type' cannot conform to 'PersistentModel'.
@Model
class MyModel: PersistentModel
{
// Model information.
}
init(for: Schema, migrationPlan: (any SchemaMigrationPlan.Type)?, configurations: [ModelConfiguration]) throws
convenience init(for: any PersistentModel.Type..., migrationPlan: (any SchemaMigrationPlan.Type)?, configurations: ModelConfiguration...) throws
convenience init(for: Schema, migrationPlan: (any SchemaMigrationPlan.Type)?, configurations: ModelConfiguration...) throws
init([any PersistentModel.Type], version: Schema.Version)