So short version is I am working on trying to setup the ability to download data from a API call and then save it into swift data. So far it seems to be the best way to do what I am wanting to do as trying to. preload with a JSON. or create the database seperately is proving frustraiting.
//
// UnitModel.swift
// Save API Data to Swiftdata
//
// Created by Matt Ross on 12/19/23.
//
import SwiftData
import Foundation
@Model
class Unit: Codable {
enum CodingKeys: CodingKey {
case age, aidisID, ailmentResist, attributeBoard, attributeInnate, attributeResist, availability, avatar, birthday, category, critRate, demerits, equipment, faintPoint, from, gender, gender1, habits, hasShift, height, hobbies, icon, id, job, label, merits, moveSpeed, name, previewStats, race, releaseDate, releaseNote, shift, shiftID, skillCount, skills, type, weapon, weight
}
var age: String?
var aidisID: Int
var ailmentResist: AilmentResist
var attributeBoard: String
var attributeInnate: String
var attributeResist: [AttributeResist]
var availability: String
var avatar: URL
var birthday: String?
var category: String
var critRate: String
var demerits: String?
var equipment: [String]
var faintPoint: Int
var from: String?
var gender: String
var gender1: String
var habits: String?
var hasShift: Bool
var height: String?
var hobbies: String?
var icon: URL
var id: Int
var job: String?
var label: URL
var merits: String?
var moveSpeed: Int
var name: String
var previewStats: PreviewStat
var race: String?
var releaseDate: String
var releaseNote: String?
var shift: String?
var shiftID: Int
var skillCount: Int
var skills: String?
var type: String
var weapon: String?
var weight: String?
init(age: String? = nil, aidisID: Int, ailmentResist: AilmentResist, attributeBoard: String, attributeInnate: String, attributeResist: [AttributeResist], availability: String, avatar: URL, birthday: String? = nil, category: String, critRate: String, demerits: String? = nil, equipment: [String], faintPoint: Int, from: String? = nil, gender: String, gender1: String, habits: String? = nil, hasShift: Bool, height: String? = nil, hobbies: String? = nil, icon: URL, id: Int, job: String? = nil, label: URL, merits: String? = nil, moveSpeed: Int, name: String, previewStats: PreviewStat, race: String? = nil, releaseDate: String, releaseNote: String? = nil, shift: String? = nil, shiftID: Int, skillCount: Int, skills: String? = nil, type: String, weapon: String? = nil, weight: String? = nil) {
self.age = age
self.aidisID = aidisID
self.ailmentResist = ailmentResist
self.attributeBoard = attributeBoard
self.attributeInnate = attributeInnate
self.attributeResist = attributeResist
self.availability = availability
self.avatar = avatar
self.birthday = birthday
self.category = category
self.critRate = critRate
self.demerits = demerits
self.equipment = equipment
self.faintPoint = faintPoint
self.from = from
self.gender = gender
self.gender1 = gender1
self.habits = habits
self.hasShift = hasShift
self.height = height
self.hobbies = hobbies
self.icon = icon
self.id = id
self.job = job
self.label = label
self.merits = merits
self.moveSpeed = moveSpeed
self.name = name
self.previewStats = previewStats
self.race = race
self.releaseDate = releaseDate
self.releaseNote = releaseNote
self.shift = shift
self.shiftID = shiftID
self.skillCount = skillCount
self.skills = skills
self.type = type
self.weapon = weapon
self.weight = weight
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
age = try container.decode(String.self, forKey: .age)
aidisID = try container.decode(Int.self, forKey: .aidisID)
ailmentResist = try container.decode(AilmentResist.self, forKey: .ailmentResist)
attributeBoard = try container.decode(String.self, forKey: .attributeBoard)
attributeResist = try container.decode([Unit.AttributeResist].self, forKey: .attributeResist)
availability = try container.decode(String.self, forKey: .availability)
avatar = try container.decode(URL.self, forKey: .avatar)
birthday = try container.decode(String.self, forKey: .birthday)
category = try container.decode(String.self, forKey: .category)
critRate = try container.decode(String.self, forKey: .critRate)
demerits = try container.decode(String.self, forKey: .demerits)
equipment = try container.decode([String].self, forKey: .equipment)
faintPoint = try container.decode(Int.self, forKey: .faintPoint)
from = try container.decode(String.self, forKey: .from)
gender = try container.decode(String.self, forKey: .gender)
gender1 = try container.decode(String.self, forKey: .gender1)
habits = try container.decode(String.self, forKey: .habits)
hasShift = try container.decode(Bool.self, forKey: .hasShift)
height = try container.decode(String.self, forKey: .height)
icon = try container.decode(URL.self, forKey: .icon)
id = try container.decode(Int.self, forKey: .id)
job = try container.decode(String.self, forKey: .job)
label = try container.decode(URL.self, forKey: .label)
merits = try container.decode(String.self, forKey: .merits)
moveSpeed = try container.decode(Int.self, forKey: .moveSpeed)
name = try container.decode(String.self, forKey: .name)
previewStats = try container.decode(PreviewStat.self, forKey: .previewStats)
race = try container.decode(String.self, forKey: .race)
releaseDate = try container.decode(String.self, forKey: .releaseDate)
releaseNote = try container.decode(String.self, forKey: .releaseNote)
shift = try container.decode(String.self, forKey: .shift)
shiftID = try container.decode(Int.self, forKey: .shiftID)
skillCount = try container.decode(Int.self, forKey: .skillCount)
skills = try container.decode(String.self, forKey: .skills)
type = try container.decode(String.self, forKey: .type)
weapon = try container.decode(String.self, forKey: .weapon)
weight = try container.decode(String.self, forKey: .weight)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(age, forKey: .age)
try container.encode(aidisID, forKey: .aidisID)
try container.encode(ailmentResist, forKey: .ailmentResist)
try container.encode(attributeBoard, forKey: .attributeBoard)
try container.encode(attributeResist, forKey: .attributeResist)
try container.encode(availability, forKey: .availability)
try container.encode(avatar, forKey: .avatar)
try container.encode(birthday, forKey: .birthday)
try container.encode(category, forKey: .category)
try container.encode(critRate, forKey: .critRate)
try container.encode(demerits, forKey: .demerits)
try container.encode(equipment, forKey: .equipment)
try container.encode(faintPoint, forKey: .faintPoint)
try container.encode(from, forKey: .from)
try container.encode(gender, forKey: .gender)
try container.encode(gender1, forKey: .gender1)
try container.encode(habits, forKey: .habits)
try container.encode(hasShift, forKey: .hasShift)
try container.encode(height, forKey: .height)
try container.encode(icon, forKey: .icon)
try container.encode(id, forKey: .id)
try container.encode(job, forKey: .job)
try container.encode(label, forKey: .label)
try container.encode(merits, forKey: .merits)
try container.encode(moveSpeed, forKey: .moveSpeed)
try container.encode(name, forKey: .name)
try container.encode(previewStats, forKey: .previewStats)
try container.encode(race, forKey: .race)
try container.encode(releaseDate, forKey: .releaseDate)
try container.encode(releaseNote, forKey: .releaseNote)
try container.encode(shift, forKey: .shift)
try container.encode(shiftID, forKey: .shiftID)
try container.encode(skillCount, forKey: .skillCount)
try container.encode(skills, forKey: .skills)
try container.encode(type, forKey: .type)
try container.encode(weapon, forKey: .weapon)
try container.encode(weight, forKey: .weight)
}
}
extension Unit {
class PreviewStat: Codable {
var def: Int
var hp: Int
var int: Int
var mnd: Int
var mp: Int
var str: Int
}
}
extension Unit {
class AttributeResist: Codable {
var dark: Int
var earth: Int
var fire: Int
var ice: Int
var light: Int
var thunder: Int
}
}
extension Unit {
class AilmentResist: Codable {
var blind: Int
var curse: Int
var illness: Int
var poison: Int
var silence: Int
var stun: Int
}
}
However I am getting the error "Return from initializer without initializing all stored properties". Any ideas?