在 Swift 的不同模块中使用可解码扩展时出现错误

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

我在不同模块的模型扩展中使用

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 个错误。 任何建议都会对我有帮助。 预先感谢。

swift5 decodable
1个回答
0
投票
  1. 将解码后的

    value
    放入本地
    let

  2. 像平常一样用

    LabelModel
    创建一个
    value

  3. 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
© www.soinside.com 2019 - 2024. All rights reserved.