SwiftUI не может добавить в массив - PullRequest
2 голосов
/ 05 августа 2020

Я пытаюсь добавить в список вроде этого:

@State var activityTimes: [Double] = []
init(day: Day) {
        self.day = day
        self.addActivityTimes()
}

func addActivityTimes() {
        for (_, activity) in self.day.activities {
            let activityTime = Double((activity.hours * 60 * 60) + (activity.minutes * 60) + activity.seconds)
            self.activityTimes.append(activityTime)
        }
}

Кажется, здесь не работает функция добавления, и я не совсем уверен, почему это происходит.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Это не то, как State следует инициализировать. Если я правильно понял вашу модель, вот возможное решение (протестировано с Xcode 12)

init(day: Day) {
    self.day = day

    let activities = day.activities.values.map { 
       Double(($0.hours * 60 * 60) + ($0.minutes * 60) + $0.seconds) 
    }
    self._activityTimes = State(initialValue: activities)
}
0 голосов
/ 05 августа 2020

Просто чтобы добавить здесь контекста, любой из оболочек свойств c, определенных SwiftUI, можно управлять только внутри вашего View свойства body. Итак, вы можете сделать:

MyView()
  .onAppear { self.addActivityTimes() }

или

Button(action: { self.addActivityTimes() } { 
  Text("Add Activity") 
}

, но вы не можете просто заполнить его, когда захотите.

...