[英]Type 'Favorites.Type' cannot conform to 'Encodable'; only struct/enum/class types can conform to protocols
Please tell me what could be the problem with this error and how to fix it?请告诉我这个错误可能是什么问题以及如何解决它?
I'm use SwiftUI 2.0我正在使用 SwiftUI 2.0
"Type 'Favorites.Type' cannot conform to 'Encodable'; only struct/enum/class types can conform to protocols" “类型 'Favorites.Type' 不能符合 'Encodable';只有 struct/enum/class 类型可以符合协议”
Code:代码:
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")
}
}
} }
Typo.错字。
According to the load method you have to encode tasks
not the class type根据load方法,您必须编码
tasks
而不是类类型
func save() {
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(tasks) {
defaults.set(encoded, forKey: "Favorites")
}
}
And don't use value(forKey:
with UserDefaults
, there is a dedicated method并且不要使用
value(forKey:
with UserDefaults
,有专门的方法
if let data = defaults.data(forKey: "Favorites") {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.