Как связать функцию в модале с элементами в списке? - PullRequest
0 голосов
/ 22 февраля 2020

Проблема

Привет, я пытаюсь создать функцию, которая перемещает элементы между различными подсписками сущности базовых данных путем изменения значения «categoryNumber». В настоящий момент я не уверен, как ссылаться на указанный элемент списка c в вызове параметра функции (Что должно go вместо x - self.thingOne (тестер: x ), который ссылается на указанный c элемент из ContentView List , который пользователь хочет переместить - x - это сущность, которую должна изменить функция).

Заранее спасибо.

Модальное представление

import SwiftUI

struct ModalSheet: View {
     @Environment(\.managedObjectContext) var context

    var body: some View {
        VStack(spacing: 12){
            Button(action:{
                self.thingOne(tester: x)
            }){
                HStack{
                    Image(systemName: "circle")
                    Text("Vital")
                }
            }
            Button(action:{
                           self.thingTwo()
                       }){
                           HStack{
                               Image(systemName: "circle")
                               Text("Urgent")
                           }
                       }

            }.padding()
        .background(Color.white)
        .cornerRadius(5)
    }
    func thingOne(tester:Tester){
        tester.setValue(1, forKey: "categoryNumber")
        do{
            try context.save()
        }
        catch{
           print("errror")
        }

    }
    func thingTwo(){

    }

}

struct ModalSheet_Previews: PreviewProvider {
    static var previews: some View {
        ModalSheet()
    }
}

Просмотр содержимого

struct ContentView: View {

    @Environment(\.managedObjectContext) var context

    @FetchRequest(entity: Tester.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Tester.index, ascending: true)], predicate: NSPredicate(format: "categoryNumber == 1")) var tester1: FetchedResults<Tester>

    @FetchRequest(entity: Tester.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Tester.index, ascending: true)], predicate: NSPredicate(format: "categoryNumber == 2")) var tester2: FetchedResults<Tester>

    @State var show = false
    var body: some View {
        ZStack{
            NavigationView{
                List{
                    Section(header: Text("Vital")){
                        ForEach(tester1, id: \.self){ item in
                            Text("\(item.name ?? "")")


                        }.onLongPressGesture {
                            withAnimation{
                                self.show.toggle()
                            }
                        }

                    }
                    Section(header: Text("Urgent")){
                        ForEach(tester2, id: \.self){ item in
                            Text("\(item.name ?? "")")
                        }
                    }
                }
                .navigationBarTitle("Home", displayMode: .inline)
                .navigationBarItems(trailing:
                    Button(action: {
                                             let tog = Tester(context: self.context)
                                             tog.name = "Test 1"
                                             tog.categoryNumber = 1

                                             do{
                                                 try self.context.save()
                                             } catch {
                                                 print("There is this error: \(error)")
                                             }
                                         }) {
                                             Image(systemName: "plus")
                                         }
            }

            if self.show{
                GeometryReader{_ in
                    ModalSheet()
                }
                .background(

                    Color.black.opacity(0.15)
                        .edgesIgnoringSafeArea(.all)
                        .onLongPressGesture{
                            withAnimation{
                                self.show.toggle()
                            }
                    }
                )
            }
        }
    }
}

Основные данные Класс

import CoreData


extension Toggle {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Toggle> {
        return NSFetchRequest<Toggle>(entityName: "Toggle")
    }

    @NSManaged public var categoryNumber: Int16
    @NSManaged public var index: Int64
    @NSManaged public var isComplete: Bool
    @NSManaged public var name: String?

}
...