簡體   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