swiftui - 类型“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")
}
}
}
截图错误: 错误
解决方案
错字。
根据加载方法,您必须编码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") {
推荐阅读
- java - 带有 Mockito 的环境的 JUnit 模拟不起作用,仍然评估为 null
- python - 我的 Mac 上的 python mysqldb 错误:库未加载:@rpath/libmysqlclient.21.dylib
- c# - 如何在 MSBuild 编译时添加 azure 函数的绑定?
- java - 通过对数循环计算立方体
- java - 解析失败:Lcom/google/android/gms/common/internal/zzbq;
- laravel - 如何使用 eloquent 在 FROM 中编写子查询?
- vba - Private Sub Worksheet_Calculate() 崩溃 excel
- podio - Podio View 返回的字段过多
- java - 如何在android中将kotlin设置转换为java
- css - 错误:找不到要导入的文件或无法读取 - 使用 Webpack 导入 scss