我在不同模块的模型扩展中使用
init(from decoder: Decoder)
时遇到问题。
我在模块1中有模型如下
public struct LabelModel {
public var value: String?
}
我在模块2
中有可解码的扩展extension LabelModel: Decodable {
enum CodingKeys: String, CodingKey {
case value
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
value = try container.decodeIfPresent(String.self, forKey: .value) // error - 'self' used before 'self.init' call or assignment to 'self'
} // error - 'self.init' isn't called on all paths before returning from initializer
}
在不同模块中添加可解码的模型扩展时,我遇到 2 个错误。 任何建议都会对我有帮助。 预先感谢。
将解码后的
value
放入本地let
,
像平常一样用
LabelModel
创建一个 value
将
self
设置为 LabelModel
public init(来自解码器:解码器) throws { 让容器=尝试解码器.container(keyedBy: CodingKeys.self) let value = try container.decodeIfPresent(String.self, forKey: .value) // 让一些其他属性 = ... // 其他属性(如果有)...
var label = LabelModel()
label.value = value
// label.someOtherProperty = someOtherProperty
// other properties (if any)...
self = label
}
如果
LabelModel
有一个直接接受 value
的初始化程序,您可以直接调用该初始化程序。
let value = ...
let label = LabelModel(value: value)
self = label