我一直在嘗試保存一個 UserData 物件,以便內容是“永久的”。所有在線方法都顯示具有基本型別的類,如 String、Int、Double 等。我知道您可以存盤資料型別,但我找不到太多
這是我要保存到磁盤的類。它出錯:“型別'UserData'不符合協議'Decodable'”和“型別'UserData'不符合協議'Encodable'”
顯然,skillBag 導致了這個問題;但我找不到任何關于如何使 Skill 符合 Codable 的資源。
class UserData : ObservableObject, Codable{
private var userName:String;
@Published private var skillBag:[Skill] = [];
init(Username user:String, skillBag skills:[Skill]) {
userName = user;
skillBag = skills;
}
}
技能等級
class Skill : Identifiable, ObservableObject, Equatable{
@Published var skillName:String = "";
@Published var level:Int = 1;
@Published var prestiege:Int = 0;
var curXP:Double = 0.0;
var maxXP:Double = 50.0;
@Published var skillDesc:String;
@Published public var skillColor:Color = Color.purple;
@Published public var buttons: [SkillButton] = [];
@Published private var prestCap:Int;
//EXTRA HIDDEN CODE
}
作為參考,這里是 SkillButton 類
class SkillButton : Identifiable, ObservableObject, Equatable{
@Published public var xp:Double = 0;
@Published private var buttonName:String = "";
@Published private var uses:Int = 0;
@Published public var buttonColor:Color = Color.pink;
@Published private var description:String;
enum CodingKeys: String, CodingKey {
case buttonName, xp, uses, buttonColor, description
}
init(ButtonName buttonName:String, XpGained xp:Double, Uses uses:Int = 0, Description desc:String = "") {
self.xp = xp;
self.buttonName = buttonName;
self.uses = uses;
self.description = desc;
}
}
我知道這些類中的每一個都需要符合 Codable,但我只是找不到使這些符合 Codable 的資源。
uj5u.com熱心網友回復:
除了不符合Skill
和SkillButton
類之外Codable
,您遇到的潛在問題歸結為@published
屬性包裝器,因為這會停止 Codable 一致性的自動綜合。
與其寫出解決方案,不如讓我參考這個 Hacking with Swift 鏈接:https ://www.hackingwithswift.com/books/ios-swiftui/adding-codable-conformance-for-published-properties
您還必須符合Color
自己Codable
的要求(除非它在最近的更新中發生了變化?)它不是Codable
開箱即用的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441136.html