SwiftUI ForEach循环未从ObservableObject

时间:2019-09-21 06:56:09

标签: swiftui userdefaults

最近几天我开始使用SwiftUI,这很有意义。 但是,在更新持久列表方面我很挣扎。

我正在使用UserDefaults和JSONEncoder。

struct ContentView:查看{     私人var slackController = Slack()     @EnvironmentObject var userData: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),但我不知道为什么列表没有更新。

该代码也放在repo中,以防我错过了有用的示例代码。 我还一直在使用SwiftUITodo来弄清楚我做错了。

任何帮助/指导将不胜感激。

0 个答案:

没有答案