类型“Favorites.Type”不能符合“Encodable”;只有结构/枚举/类类型可以符合协议
Posted
技术标签:
【中文标题】类型“Favorites.Type”不能符合“Encodable”;只有结构/枚举/类类型可以符合协议【英文标题】:Type 'Favorites.Type' cannot conform to 'Encodable'; only struct/enum/class types can conform to protocols 【发布时间】: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
【问题讨论】:
【参考方案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")
【讨论】:
以上是关于类型“Favorites.Type”不能符合“Encodable”;只有结构/枚举/类类型可以符合协议的主要内容,如果未能解决你的问题,请参考以下文章
使用 if 语句时:类型 '()' 不能符合 'View';只有结构/枚举/类类型可以符合协议
“类型‘()’不能符合‘视图’;只有结构/枚举/类类型可以符合协议”
类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议