SwiftData — удаление всех экземпляров модели приводит к ошибке «Тип не может соответствовать PersistentModel».

1
9

У меня есть модель 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)
Назар
Вопрос задан8 апреля 2024 г.

1 Ответ

2
Фадей
Ответ получен18 сентября 2024 г.

Ваш ответ

Загрузить файл.