Это требует меньше, вы можете объявлять struct любой, где в этом нет необходимости, как эта структура должна быть внутри класса coredata, вы все равно можете использовать struct внутри этого класса, если вы не объявляете ее внутри него.

аюсь сохранить массив структур в coredata. Я провел много исследований, но я не могу найти решение. Вот что я получил:

import Cocoa
import CoreData

class ViewController: NSViewController {

    struct StudentsStruct {
        let firstName: String
        let lastName: String
        let age: Int
    }


    let Studentsdata: [StudentsStruct] = [StudentsStruct(firstName: "Albert", lastName: "Miller", age: 24), StudentsStruct(firstName: "Susan", lastName: "Gordon", age: 24), StudentsStruct(firstName: "Henry", lastName: "Colbert", age: 24)]


    override func viewDidLoad() {
        super.viewDidLoad()

        let student: Student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: DatabaseController.getContext()) as! Student


        for items in Studentsdata {
            student.firstName = StudentsStruct.firstName
            student.lastName = StudentsStruct.lastName
            student.age = StudentsStruct.age
        }

        DatabaseController.saveContext()
        let fetchRequest: NSFetchRequest<Student> = Student.fetchRequest()

        print (student)
    }
}

DatabaseController - это решение, которое я получил из этого урока:https://www.youtube.com/watch?v=da6W7wDh0Dw Это не так важно, это просто создание функции getContext. Что важно, в командной строке "student.firstName = StudentsStruct.firstName" я получаю сообщение об ошибке "член экземпляра" firstName "не может использоваться для типа ViewController.StudentStruct. После попыток и попыток у меня заканчиваются идеи, как получить массив структур в coredata.

Это файл DatabaseController:

import Foundation
import  CoreData


class DatabaseController  {

    private init() {
    }
    class func getContext() -> NSManagedObjectContext {
        return DatabaseController.persistentContainer.viewContext
    }

    // MARK: - Core Data stack

    static var persistentContainer: NSPersistentContainer = {
                let container = NSPersistentContainer(name: "StudentCoreFile")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error {
                               fatalError("Unresolved error \(error)")
            }
        })
        return container
    }()

    class func saveContext () {
        let context = DatabaseController.persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                // Replace this implementation with code to handle the error appropriately.
                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }

}

За любую помощь, спасибо заранее!

Хорошо, вы правы, я забыл выполнить запрос на получение. Вот мой текущий код:

import Cocoa
import CoreData

class ViewController: NSViewController {

    struct StudentsStruct {
        let firstName: String
        let lastName: String
        let age: Int
    }


    let Studentsdata: [StudentsStruct] = [StudentsStruct(firstName: "Albert", lastName: "Miller", age: 24), StudentsStruct(firstName: "Susan", lastName: "Gordon", age: 24), StudentsStruct(firstName: "Henry", lastName: "Colbert", age: 24)]


    override func viewDidLoad() {
        super.viewDidLoad()

        let student: Student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: DatabaseController.getContext()) as! Student


        for item in Studentsdata {
            let student: Student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: DatabaseController.getContext()) as! Student
            student.firstName = item.firstName
            student.lastName = item.lastName
            student.age = Int16(item.age)
        }
        DatabaseController.saveContext()
        let fetchRequest: NSFetchRequest<Student> = Student.fetchRequest()

        do {
            let searchResults = try DatabaseController.getContext().fetch(fetchRequest)
            print("number of results: \(searchResults.count)")
            for result in searchResults as [Student] {
                print(student)
            }

        } catch {

            print ("error")

        }

    }
}

Работает без ошибок. Теперь я получаю 32 результатов поиска. Каждая запись: возраст = 0; firstName = ноль; lastName = ноль;

Для сравнения, этот код без цикла работает:

import Cocoa
import CoreData

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let student: Student = NSEntityDescription.insertNewObject(forEntityName: "Student", into: DatabaseController.getContext()) as! Student

        student.firstName = "henry"
        student.lastName = "miller"
        student.age = 22

        DatabaseController.saveContext()
        let fetchRequest: NSFetchRequest<Student> = Student.fetchRequest()

        do {
            let searchResults = try DatabaseController.getContext().fetch(fetchRequest)
            print("number of results: \(searchResults.count)")
            for result in searchResults as [Student] {
                print(student)
            }
        } catch {

            print ("error")
        }

    }

}

Ответы на вопрос(2)

Ваш ответ на вопрос