【问题标题】:Type 'Favorites.Type' cannot conform to 'Encodable'; only struct/enum/class types can conform to protocols类型“Favorites.Type”不能符合“Encodable”;只有结构/枚举/类类型可以符合协议
【发布时间】:2020-10-27 14:26:28
【问题描述】:

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

我正在使用 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")
    }
}

}

屏幕截图错误: Error

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    错字。

    根据 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") {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多