试图使这个 class 可编码和可解码

Trying to make this class codable and decodable

试图使这个class可编码和可解码

import Foundation

class Attribute : Decodable {
  
  struct Att: Decodable {
    var number: Int16
    var label: String
    var comments: String
    
    // Everything from here on is generated for you by the compiler
    init(from decoder: Decoder) throws {
      let keyedContainer = try decoder.container(keyedBy: CodingKeys.self)
      number = try keyedContainer.decode(Int16.self, forKey: .number)
      label = try keyedContainer.decode(String.self, forKey: .label)
      comments = try keyedContainer.decode(String.self, forKey: .comments)
    }
    
    enum CodingKeys: String, CodingKey {
      case number
      case label
      case comments
    }
  }
  
}

extension Attribute: Encodable {
  
  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    try container.encode(number, forKey: .number)
    try container.encode(label, forKey: .label)
    try container.encode(comments, forKey: .comments)
  }
}

我在这些行上有错误

try container.encode(number, forKey: .number)
try container.encode(label, forKey: .label)
try container.encode(comments, forKey: .comments)

随留言

Use of unresolved identifier 'number'

Use of unresolved identifier 'label'

Use of unresolved identifier 'comments'

我该如何解决?

为什么你有一个空的 class,里面有一个嵌套的 struct?错误来自于这些属性是在 Att 而不是 Attribute 上定义的,因此您需要在扩展 Att 时对它们进行编码以符合 Encodable.

顺便说一句,你没有任何特殊的 encoding/decoding,所以你不需要手动声明 encoder/decoder 函数,编译器可以为你合成它们。

class Attribute: Codable {

    struct Att: Codable {
        var number: Int16
        var label: String
        var comments: String
    }
}

我可能遗漏了一些东西,但以下应该可以工作,或者至少可以编译:

class Attribute : Decodable {

  var number: Int16
  var label: String
  var comments: String

// Everything from here on is generated for you by the compiler
  required init(from decoder: Decoder) throws {