为什么这个类不符合Decodable/Encodable协议?

问题描述 投票:0回答:1

下面的类在前面添加@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

swift codable swift-data
1个回答
0
投票

@Model
类被声明为符合
Codable
时,不会为您合成任何内容,因此您需要手动符合
Decodable
Encodable

class ThemeModel: Identifiable, Codable {
    // ...

    required init(from decoder: Decoder) throws {
        //...
    }

    func encode(to encoder: Encoder) throws {
        //...
    }
}

但也许最好的解决方案是对于 @Model 类型根本不符合 Codable

© www.soinside.com 2019 - 2024. All rights reserved.