首页 > 解决方案 > 类型“Favorites.Type”不能符合“Encodable”;只有结构/枚举/类类型可以符合协议

问题描述

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

我正在使用 SwiftUI 2.0

“类型‘Favorites.Type’不能符合‘Encodable’;只有结构/枚举/类类型可以符合协议”

代码:

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")
    }
}

}

截图错误: 错误

标签: swiftui

解决方案


错字。

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

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

并且不要使用value(forKey:with UserDefaults,有专门的方法

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

推荐阅读