【问题标题】:How to manually decode an an array in swift 4 Codable?如何在 swift 4 Codable 中手动解码数组?
【发布时间】:2017-12-05 01:19:30
【问题描述】:

这是我的代码。但我不知道将值设置为什么。必须手动完成,因为实际结构比这个例子稍微复杂一些。

有什么帮助吗?

struct Something: Decodable {
   value: [Int]

   enum CodingKeys: String, CodingKeys {
      case value
   }

   init (from decoder :Decoder) {
      let container = try decoder.container(keyedBy: CodingKeys.self)
      value = ??? // < --- what do i put here?
   }
}

【问题讨论】:

    标签: swift codable


    【解决方案1】:

    由于一些错误/拼写错误,您的代码无法编译。

    解码Int写数组

    struct Something: Decodable {
        var value: [Int]
    
        enum CodingKeys: String, CodingKey {
            case value
        }
    
        init (from decoder :Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            value = try container.decode([Int].self, forKey: .value)
        }
    }
    

    但如果问题中的示例代码代表整个结构,则可以简化为

    struct Something: Decodable {
        let value: [Int]
    }
    

    因为可以推断出初始化程序和CodingKeys。

    【讨论】:

    • 谢谢.. 我正在尝试[Int.self]。没有意识到.self 必须在外面
    • 我相信你也可以只指定Array.self 和Array&lt;Int&gt;.self(例如[Int].self)将从value 声明的类型中推断出来。
    【解决方案2】:

    感谢 Joshua Nozzi 的提示。以下是我如何实现对 Int 数组进行解码:

    let decoder = JSONDecoder()
    let intArray = try? decoder.decode([Int].self, from: data)
    

    无需手动解码。

    【讨论】:

      【解决方案3】:

      或者你可以通用:

      let decoder = JSONDecoder()
      let intArray:[Int] = try? decoder.decode(T.self, from: data) 
      

      【讨论】:

        【解决方案4】:

        斯威夫特 5.1

        就我而言,this answer 非常有帮助

        我有一个 JSON,格式为:"[ "5243.1659 EOS" ]"

        因此,您可以在没有密钥的情况下解码数据

        struct Model: Decodable {
            let values: [Int]
        
            init(from decoder: Decoder) throws {
                var container = try decoder.unkeyedContainer()
                let values = try container.decode([Int].self)
                self.values = values
            }
        }
        
        let decoder = JSONDecoder()
        let result = try decoder.decode(Model.self, from: data)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-04
          • 2018-01-09
          • 1970-01-01
          • 1970-01-01
          • 2021-05-24
          相关资源
          最近更新 更多