Нужно ли копировать неизменные модели на новую схему версии в SwiftData во время миграции?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Нужно ли копировать неизменные модели на новую схему версии в SwiftData во время миграции?

Сообщение Anonymous »

Вопрос с примером кода: < /p>
У нас есть две модели данных Swift в версии versionschemav1 и хотим добавить одно дополнительное поле в одну из модели в следующей версии приложения. Миграция, потому что мы хотим вызвать некоторую существующую функцию один раз сразу после миграции. Разрешено ли здесь совершать пользовательскую миграцию? Примечание. Наш проект имеет 25 моделей и трудно скопировать все модели на следующую версиюсхема < /p>
typealias Car = AppSchemaV1.Car
typealias User = AppSchemaV1.User

enum AppSchemaV1: VersionedSchema {
static var versionIdentifier = Schema.Version(1,0,0)
static var models: [any PersistentModel.Type] {
[Car.self, User.self]
}
}

extension AppSchemaV1 {

class Car {
let carName: String
let carPrice: String

init(name: String, price: String) {
carName = name
carPrice = price
}
}

class User {
let name: String
let id: String

init(name: String, id: String) {
self.name = name
self.id = id
}
}

< /code>
В следующем приложении Verison мы собираемся добавить дополнительное свойство в модель автомобиля. Мы будем сохранять Appschemav1 как есть.typealias Car = AppSchemaV2.Car
typealias User = AppSchemaV1.User
< /code>
Мы создадим новую версиюсхема для удержания модели автомобиля < /p>
enum AppSchemaV2: VersionedSchema {
static var versionIdentifier = Schema.Version(2,0,0)
static var models: [any PersistentModel.Type] {
[Car.self, User.self]
}
}

extension AppSchemaV1 {
class Car {
let carName: String
let carPrice: String
var carType: String? // This is the change in next app version

init(name: String, price: String, carType: String? = nil) {
carName = name
carPrice = price
carType = carType
}
}
}
< /code>
Мы создадим план миграции, как ниже. Мы хотим совершить пользовательскую миграцию, потому что хотим вызвать функцию после добавления нового столбца. Примечание. Функция не о заполнении данных столбца < /p>
enum MigrationPlan: SchemaMigrationPlan {
static var schemas: [any VersionedSchema.Type] {
[AppSchemaV1.self, AppSchemaV2.self]
}

static let migrateV1toV2 = MigrationStage.custom(fromVersion: AppSchemaV1.self, toVersion: AppSchemaV2.self, willMigrate: nil { _ in
// call my function to do some operation
}

static var stage: [MigrationStage] {
[migrateV1toV2]
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... ata-during
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • SwiftData Custom Migration всегда терпит неудачу - возможна ошибка в SwiftData
    Гость » » в форуме IOS
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость
  • SwiftData Custom Migration всегда терпит неудачу - возможна ошибка в SwiftData
    Anonymous » » в форуме IOS
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Постоянные неизменные объекты в реляционную базу данных
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Неизменные и изменяемые типы
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Неизменные и изменяемые типы
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»