首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型“Favorites.Type”不能符合“可编码”;只有struct/enum/class类型才能符合协议

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

Stack Overflow用户
提问于 2020-10-27 14:26:28
回答 1查看 372关注 0票数 0

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

我使用的是SwiftUI 2.0

“类型'Favorites.Type‘不能符合’可编码‘;只有struct/enum/class类型才能符合协议”

代码:

代码语言:javascript
复制
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")
    }
}

}

截图错误:错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-27 14:30:35

错了。

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

代码语言:javascript
复制
func save() {
    let encoder = JSONEncoder()
    if let encoded = try? encoder.encode(tasks)  {
        defaults.set(encoded, forKey: "Favorites")
    }
}

不要将value(forKey:UserDefaults结合使用,这里有一个专用的方法

代码语言:javascript
复制
if let data = defaults.data(forKey: "Favorites") {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64556567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档