类型“ Favorites.Type”不符合“可编码”;只有struct / enum / class类型可以符合协议

时间:2020-10-27 14:26:28

标签: swiftui

请告诉我此错误可能是什么问题以及如何解决?

我正在使用SwiftUI 2.0

“类型'Favorites.Type'不符合'Encodable';只有struct / enum / class类型可以符合协议”

代码:

class Favorites: ObservableObject {

private var tasks: Set<String>
let defaults = UserDefaults.standard

init() {
    let decoder = JSONDecoder()
    if let data = defaults.value(forKey: "Favorites") as? Data {
        let taskData = try? decoder.decode(Set<String>.self, from: data)
        self.tasks = taskData ?? []
    } else {
        self.tasks = []
    }
}

func getTaskIds() -> Set<String> {
    return self.tasks
}

func isEmpty() -> Bool {
    tasks.count < 1
}

func contains(_ task: dataTypeFont) -> Bool {
    tasks.contains(task.id)
}

func add(_ task: dataTypeFont) {
    objectWillChange.send()
    tasks.insert(task.id)
    save()
}

func remove(_ task: dataTypeFont) {
    objectWillChange.send()
    tasks.remove(task.id)
    save()
}

func save() {
    let encoder = JSONEncoder()
    if let encoded = try? encoder.encode(Favorites)  {
        defaults.set(encoded, forKey: "Favorites")
    }
}

}

屏幕截图错误: Error

1 个答案:

答案 0 :(得分:0)

错别字。

根据 load 方法,您必须编码tasks而不是类类型

func save() {
    let encoder = JSONEncoder()
    if let encoded = try? encoder.encode(tasks)  {
        defaults.set(encoded, forKey: "Favorites")
    }
}

不要将value(forKey:UserDefaults一起使用,有一种专用方法

if let data = defaults.data(forKey: "Favorites") {