使用符合 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: Style
。 Style
不可编码。最简单的方法是将其设为基于字符串的枚举
enum Style: String, Codable
如果你这样做,那么,例如,你的 class 将被编码为 JSON,并带有这样的字段
"style": "green"
我是 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: Style
。 Style
不可编码。最简单的方法是将其设为基于字符串的枚举
enum Style: String, Codable
如果你这样做,那么,例如,你的 class 将被编码为 JSON,并带有这样的字段
"style": "green"