使用符合 Codable 协议的枚举制作 Class 的问题

Issue with making a Class with an enum Conform to Codable Protocol

我是 IOS 开发的新手,我正在尝试创建一个应用程序,其中的轮子会旋转并随机停在某个点,以将信息推送到用户默认值中我需要解码自定义对象.但是,当我尝试使 class 'Codable' 时,它给我错误不符合协议。

如果我删除枚举它可以工作,但我需要枚举来为每个单独的选择设置颜色,有没有办法使这个 Codable ?

TTFortuneWheel 是我安装的 Pod 来辅助旋转动画。

import UIKit

import TTFortuneWheel

class CarnivalWheel: FortuneWheelSliceProtocol, Codable {
 
    enum Style {
             case blue
             case purple
             case green
             case grey
             case orange
             case yellow
             
         }
         var style: Style = .blue
         var backgroundColor: UIColor? {
                   
               switch style {
               case .blue: return TTUtils.uiColor(from: 0xdff9fb)
               case .purple: return TTUtils.uiColor(from: 0xa29bfe)
               case .green: return TTUtils.uiColor(from: 0x7bed9f)
               case . grey: return TTUtils.uiColor(from: 0xdfe4ea)
               case .orange: return TTUtils.uiColor(from: 0xffbe76)
               case .yellow: return TTUtils.uiColor(from: 0xf6e58d)
                   
               default: print("error getting colors")
               }
           }
  
        var title: String
        var degree: CGFloat = 0.0
        
    
    
    init(title: String) {
      self.title = title
    }
    
      
    
        var fontColor: UIColor {
        return UIColor.black
    }


        var offsetFromExterior: CGFloat {
        return 10.0
        
    }
    
        var stroke: StrokeInfo? {
        return StrokeInfo(color: UIColor.white, width: 1.0)
    }
    
    
    
    
    convenience init(title: String, degree: CGFloat) {
        self.init(title: title)
        self.degree = degree
    }
    

}

如果您想让可编码的 class 的每个 属性 本身都可以编码(也就是说,不定义自定义 init(from:)encode(to:)方法)。

问题是var style: StyleStyle 不可编码。最简单的方法是将其设为基于字符串的枚举

enum Style: String, Codable

如果你这样做,那么,例如,你的 class 将被编码为 JSON,并带有这样的字段

"style": "green"