下面的类在前面添加@Model宏时会抛出错误:
类型“ThemeModel”不符合协议“Decodable”
类型“ThemeModel”不符合协议“Encodable”
但是所有变量都是可编码的,类中没有方法(全部删除),并且只有一个初始值设定项。可能是什么问题?
class ThemeModel: Identifiable, Codable {
var id: String
var name: String
var backgroundLightColor: String
var backgroundDarkColor: String
var butonSolidLightColor: String
var butonSolidDarkColor: String
var butonStrokeLightColor: String
var butonStrokeDarkColor: String
var butonGradientStartLightColor: String
var butonGradientStopLightColor: String
var butonGradientStartDarkColor: String
var butonGradientStopDarkColor: String
var fontSolidLightColor: String
var fontSolidDarkColor: String
var fontStrokeLightColor: String
var fontStrokeDarkColor: String
var titleLightColor: String
var titleDarkColor: String
var butonCornerRadius: CGFloat
init(
id: String = UUID().uuidString,
name: String,
backgroundLightColor: String,
backgroundDarkColor: String,
butonSolidLightColor: String,
butonSolidDarkColor: String,
butonStrokeLightColor: String,
butonStrokeDarkColor: String,
butonGradientStartLightColor: String,
butonGradientStopLightColor: String,
butonGradientStartDarkColor: String,
butonGradientStopDarkColor: String,
fontSolidLightColor: String,
fontSolidDarkColor: String,
fontStrokeLightColor: String,
fontStrokeDarkColor: String,
titleLightColor: String,
titleDarkColor: String,
butonCornerRadius: CGFloat = 28
) {
self.id = id
self.name = name
self.backgroundLightColor = backgroundLightColor
self.backgroundDarkColor = backgroundDarkColor
self.butonSolidLightColor = butonSolidLightColor
self.butonSolidDarkColor = butonSolidDarkColor
self.butonStrokeLightColor = butonStrokeLightColor
self.butonStrokeDarkColor = butonStrokeDarkColor
self.butonGradientStartLightColor = butonGradientStartLightColor
self.butonGradientStopLightColor = butonGradientStopLightColor
self.butonGradientStartDarkColor = butonGradientStartDarkColor
self.butonGradientStopDarkColor = butonGradientStopDarkColor
self.fontSolidLightColor = fontSolidLightColor
self.fontSolidDarkColor = fontSolidDarkColor
self.fontStrokeLightColor = fontStrokeLightColor
self.fontStrokeDarkColor = fontStrokeDarkColor
self.titleLightColor = titleLightColor
self.titleDarkColor = titleDarkColor
self.butonCornerRadius = butonCornerRadius
}
}
Swift 5.9/XCode 15.1
当
@Model
类被声明为符合 Codable
时,不会为您合成任何内容,因此您需要手动符合 Decodable
和 Encodable
class ThemeModel: Identifiable, Codable {
// ...
required init(from decoder: Decoder) throws {
//...
}
func encode(to encoder: Encoder) throws {
//...
}
}
但也许最好的解决方案是对于 @Model 类型根本不符合 Codable