У меня есть пользовательский массив, соответствующий моей модели сущности CoreData. Цель состоит в том, чтобы вставить это в мою таблицу CoreData, используя NSBatchInsertRequest. Проблема в том, что Мой пользовательский массив не относится к типу [[String: Any]], который ожидается от типа объектов NSBatchInsertRequest. Как я могу достичь этого без зацикливания и преобразования их в пары ключ-значение (если I l oop, цель NSBatchInsertRequest будет бесполезной). Я попытался обойти и застрял в середине. То, что я до сих пор делал, это ниже.
Пользовательская модель
struct DataModel:Codable {
let id:Int?
let title:String?
let descriptionText:String?
}
Поместите Im застрявшим с ошибкой "Невозможно преобразовать значение типа '[DataModel]' в ожидаемый тип аргумента '[[ Строка: Любая]] '"
func saveData(model: [DataModel]) {
let entity = NSEntityDescription.entity(forEntityName: "User", in: managedObjectContext)
let insertRequest = NSBatchInsertRequest(entity:entity!, objects: model)//Error is here
try! context?.execute(insertRequest)
try! context?.save()
}
До сих пор я пытался создать расширение для преобразования его в словарь (что я не уверен, что это лучший вариант)
extension Encodable {
subscript(key: String) -> Any? {
return dictionary[key]
}
var dictionary: [String: Any] {
return (try? JSONSerialization.jsonObject(with: JSON.encoder.encode(self))) as? [String: Any] ?? [:]
}
}
struct JSON {
static let encoder = JSONEncoder()
}
Но это преобразует только один объект внутри массива (только если вы указали индекс). Каков наилучший способ достижения моей цели?