Объект, равный нулю после условия if

#list #core-data #swiftui

Вопрос:

Это работает — все student.name записи отображаются правильно

 import SwiftUI
import CoreData

let students = loadData()

struct ContentView: View {
    var body: some View {

            NavigationView {
                List(students) { student in
                    HStack {
                        Text(student.name ?? "No data")
                    }
                }
            }
        }
    }
 

Но это — нет. После правильного пропуска «если», «студенты» становятся равными нулю.
*** Завершение работы приложения из-за неперехваченного исключения «Исключение NSInvalidArgumentException», причина: «- [Имя пользователя]: непризнанный селектор отправлен экземпляру 0x60000343f840» V

XCode версии 13.0 (13A233)

 import SwiftUI
import CoreData

let students: [UserEntity] = loadData()

struct ContentView: View {
    var body: some View {


        if students.isEmpty{
            NoDataView()
        }
        else{
            NavigationView {
                List(students) { student in
                    HStack {
                        Text(student.name ?? "dsada")
                    }
                }
            }
        }
    }
}
 

Комментарии:

1. Возможно, это не по теме, но вы объявили students вне своей структуры, сделав ее какой-то глобальной переменной, и это плохое дизайнерское решение. Почему вы не используете @FetchRequest решение здесь?

2. Вас интересует не if утверждение, а то, как вы его воплотили students . В первом случае вы объявляете это так let students = loadData() , во втором-вы объявляете это так let students: [UserEntity] = loadData() . Мы понятия не имеем, что такое loadData() а, и нам все равно. @JoakimDanielson абсолютно прав. Это не то, как вы используете CoreData . Я согласен, что это выглядит так, как будто вы создали какой-то глобальный источник истины, но это и есть ваша база данных. И вы получаете к нему доступ во всех нужных вам представлениях @FetchRequest . С этим, CoreData реализует остальное.