0

既存のリストがありますが、そこに新しいアイテムを追加できるようにしたいと考えています。今、私は を使用して@EnvironmentObjectいますが、配列に要素を追加すると、ビューが更新されませんか? を使用しているインターネット上のソリューションを見てきました objectWillChange.send()が、Swift の初心者として、それを操作してやりたいことを行う方法がわかりません。

クラス

class ChecklistObject: ObservableObject {
    @Published var description: String
    @Published var complete: Bool
    let ID: Int
    
    init(_ desc: String, _ complete: Bool, ID: Int){
        description = desc
        self.complete = complete
        self.ID = ID
    }
}

class Event: ObservableObject {
    @Published var Name: String
    @Published var CalendarID: Int
    var timeStart: Date
    var timeEnd: Date
    @Published var checklist = [ChecklistObject]()
    @Published var checklistSize = 0
    
    init(_ eventName: String, _ calID: Int, _ timeStart: Date, _ timeEnd: Date) {
        Name = eventName
        CalendarID = calID
        self.timeStart = timeStart
        self.timeEnd = timeEnd
        logger.log("Successfully created new event")
    }
    
    func newChecklistItem(Content: String){
        objectWillChange.send()
        checklist.append(ChecklistObject(Content, false, ID: getChecklistSize()))
        //checklistSize = checklistSize + 1
    }
    
    func getChecklistSize() -> Int {
        return checklist.count
    }
}

リスト

VStack (alignment: .leading) {
    Text("Checklist")
        .font(.title)
        .bold()
    ForEach(event.checklist.indices) { idx in
        ChecklistDisplayRow()
            .environmentObject(event.checklist[idx])
    }
    Spacer()
        .frame(width: 360, height: 10)
    Button(action: {
        event.newChecklistItem(Content: "New item")
        event.checklistSize = event.checklistSize + 1
    }) {
        HStack{
            if #available(OSX 11.0, *) {
                Image(systemName: "plus.circle")
            } else {
                Path{ path in
                    path.move(to: CGPoint(x: 10, y: 20))
                    path.addLine(to: CGPoint(x: 10, y:0))
                    path.move(to:CGPoint(x: 0, y: 10))
                    path.addLine(to: CGPoint(x: 20, y: 10))
                }
            }
            Text("Add new item")
                .font(.caption)
        }
    }
    .buttonStyle(PlainButtonStyle())
}

前もって感謝します。

4

1 に答える 1