Цикл SwiftUI ForEach не обновляется из ObservableObject - PullRequest
0 голосов
/ 21 сентября 2019

Я начал играть с SwiftUI в последние несколько дней, и это имеет большой смысл.Тем не менее, я испытываю трудности при обновлении постоянного списка.

Я использую UserDefaults и JSONEncoder.

struct ContentView: View {private var slackController = Slack () @EnvironmentObject varuserData: UserData

var body: some View {
    return NavigationView {
        List {
            ForEach(self.userData.statuses) { myStatus in
                HStack {
                   // row code
                }
                .onTapGesture {
                    self.slackController.setStatus(text: myStatus.description, emoji: myStatus.emoji)
                }
            }
            .onDelete(perform: delete)
        }
    }
}

func delete(at offsets: IndexSet) {
    self.userData.statuses.remove(atOffsets: offsets)
}

И вставка, и удаление работают, потому что, когда я перезапускаю приложение, я вижу изменения.

private let defaultStatuses: [Status] = [
    Status(emoji: ":spiral_calendar_pad:", description: "In a meeting", expireHours: 1),
    Status(emoji: ":car:", description: "Commuting", expireHours: 12),
]

final class UserData: ObservableObject {
    let didChange = PassthroughSubject<UserData, Never>()

    @UserDefault(key: "ApiToken", defaultValue: "")
    var apiToken: String {
        didSet {
            didChange.send(self)
        }
    }

    @UserDefault(key: "Statuses", defaultValue: defaultStatuses)
    var statuses: [Status] {
        didSet {
            didChange.send(self)
        }
    }
}

Я вижу, что didChange.send(self) вызывается,но я не могу понять, почему список не обновляется.

Код также находится в репо на случай, если я что-то пропустил из примера, который полезен.Я также использовал SwiftUITodo , чтобы попытаться понять, что я делаю неправильно.

Любая помощь / руководство будет приветствоваться.

...