繁体   English   中英

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

[英]Type 'Favorites.Type' cannot conform to 'Encodable'; only struct/enum/class types can conform to protocols

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

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

}

截图错误:错误

错字。

根据load方法,您必须编码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") {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM