既存のリストがありますが、そこに新しいアイテムを追加できるようにしたいと考えています。今、私は を使用して@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())
}
前もって感謝します。