У меня есть такой класс @Model
:
@Model
final class MyModel {
@Attribute(.unique) var id: String
var obj1: Object1
var obj2: Object2
init(id: String, obj1: Object1, obj2: Object2) {
self.id = id
self.obj1 = obj1
self.obj2 = obj2
}
}
Object1
и Object2
оба structs
такие:
struct Object1: Codable {
var description: String
}
Я заметил, что при попытке использовать модель в своем приложении с помощью
.modelContainer(for: [MyModel.self])
Невозможно иметь описание атрибута с именем
После некоторого копания я пришел к выводу, что ошибка связана с полями description
в Object1
и Object2
. Однако мне нужно, чтобы эти два structs
содержали это конкретное поле, поскольку они представляют входящие данные JSON. Как я могу решить эту проблему оптимальным способом?
@JoakimDanielson Я обновил свой пост, ошибка не является ошибкой компилятора, а скорее ошибкой времени выполнения в момент запуска приложения.
Я понимаю, что это ошибка времени выполнения, но я не получаю этой ошибки, поэтому вам нужно объяснить, что вы делаете, когда это происходит. Или вы имеете в виду, что это происходит непосредственно при запуске приложения?
Да, сразу после запуска приложения. Я также попробовал это с фиктивным проектом, код которого я опубликовал. Тот же результат
Не знаю, почему слово description
является проблемой, информации недостаточно.
из вашего кода.
Но учтите: если вы получаете свойства из JSON, вы можете использовать CodingKeys
переименовать их. Например:
struct Object1: Codable {
var info: String
// ...
enum CodingKeys: String, CodingKey {
case info = "description" // <--- here, description in the JSON data
//...
}
}
description
кажется запретным полем для @Model. Вы можете найти эту ошибку на этой странице hackingwithswift.com/quick-start/swiftdata/…Что ж, использование enum CodingKeys
должно это исправить, верно.
Это невоспроизводимо, вам нужно включить код, который генерирует ошибку.