我会在一个可编码协议的结构中使用枚举。但是我不知道,hogy为enum做一个init
。如果我没有init
,编译器将引发错误。
这里的目标是UpdateIn
类型中的value
参数可以是两个东西,一个字符串或一个FormFiled
结构。
你知道怎么做这个初始化吗?
struct UpdateIn: Content {
var keyPath: [String]
var value: Value
var operation: String
}
enum Value: Decodable {
init(from decoder: Decoder) throws {
<#code#>
}
case str(String)
case formField(FormField)
}
struct FormField: Content {
var name: String
var type: String
var options: [String: FormFieldOption]?
var selectedOption: String?
var visibleIfIndIsVisible: Int?
var ind: Int
var mandatory: Bool // TODO: isMandatory
var dateCreatedAt: Date?
var selectItemOtherArbitraryValueEnable: Bool?
var regex: String?
var hasImage: Bool?
var defaultFormFieldOptionId: String?
}
根据答案,我试图提取值并分配给特定的变量,但它被拒绝了,你知道为什么吗?
let formField: FormField = params.value
无法将类型“Value”的值转换为指定的类型“FormField”
2条答案
按热度按时间2ic8powd1#
你只需要切换你的枚举关联值:
holgip5t2#
Swift 5.5+
Swift 5.5允许具有关联值的枚举自动符合
Codable
(如果它们的关联值是Codable
):结果:
Swift <5.5
您必须手动实现
encode(to:)
和init(from:)
,就像在this answer中一样。