Я думаю, что с этим SwiftUI все в порядке. Понятно, что мы просто определяем макет как структуру, и может быть ограничено обычное программирование, вовлеченное в макет. У меня трудности с таким мышлением. Каков наилучший способ сделать это?
Возьмите пример ниже. Проект является NSManagedObject. Все, что я хочу сделать, это передать пример записи, чтобы SwiftUI отображал. Ничего из того, что я пробую, не работает.
struct ProjectView: View
{
@State var project: Project //NSManagedObject
var body: some View
{
TextField("", text: Binding<String>($project.projectName)!)
}
}
struct ProjectView_Previews: PreviewProvider
{
static var previews: some View
{
var p:Project
p = getFirstProject() //returns a Project
return ProjectView(project: p)
}
}
Если я пытаюсь вернуть структуру, она говорит, что не может просмотреть в файле.
Если я не возвращаю структуру, я получаю, что Функция объявляет непрозрачный возвращаемый тип, но в его теле нет операторов возврата, из которых можно вывести основную ошибку типа.
ОБНОВЛЕНИЕ:
var app = UIApplication.shared.delegate as! AppDelegate
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
lazy var persistentContainer: NSPersistentCloudKitContainer = {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
lazy var managedObjectContext: NSManagedObjectContext =
{
return persistentContainer.viewContext
}()
}
И остальная часть кода:
func allRecords<T: NSManagedObject>(_ type : T.Type, sort: NSSortDescriptor? = nil) -> [T]
{
let context = app.managedObjectContext
let request = T.fetchRequest()
if let sortDescriptor = sort
{
request.sortDescriptors = [sortDescriptor]
}
do
{
let results = try context.fetch(request)
return results as! [T]
}
catch
{
print("Error with request: \(error)")
return []
}
}
func getCount() -> String
{
let r = allRecords(Project.self)
return String(r.count)
}
struct ProjectView: View
{
// @ObservedObject var project: Project
var body: some View
{
Text(getCount())
// TextField("", text: Binding<String>($project.projectName)!)
}
}
struct ProjectView_Previews: PreviewProvider
{
static var previews: some View
{
ProjectView()
}
}
r.count возвращает 0, но в главном потоке приложения он возвращает 8. Правильно ли определен app.managedObjectContext? Я думаю, что это слишком усложнилось слишком быстро.