在Swift 4中使我的简单结构可编码不起作用

时间:2018-09-04 11:28:25

标签: ios swift codable

我是Swift4的新手。我正在尝试使用Codable使我的struct类型的对象可编码和可解码为JSON。

这是我的struct Product

//我声明它符合codable

public struct Product: Codable {
  public let name: String
  public var isSold: Bool
  public let icon: UIImage // problem is here

  …

  // I have excluded 'icon' from codable properties
  enum CodingKeys: String, CodingKey {
        case name
        case isSold = “is_sold”
    }
}

编译器告诉我错误:'UIImage’ doesn’t conform to ‘Decodable’,但是我定义了CodingKeys,它应该告诉我们希望哪些属性是可编码的,并且已经排除了UIImage属性。

我认为编译器不会抱怨UIImage类型,但仍然会抱怨。如何摆脱这个错误?

1 个答案:

答案 0 :(得分:4)

由于UIImage无法解码,并且没有默认值,因此Decodable协议无法合成初始化程序。

如果将icon设为可选的UIImage并将nil设置为默认值,则可以从JSON解码其余结构。

public struct Product: Codable {
    public let name: String
    public var isSold: Bool
    public var icon: UIImage? = nil 
    enum CodingKeys: String, CodingKey {
        case name
        case isSold = "is_sold"
    }
}

您还可以使其成为非可选,并分配一个占位符图像。

注意,根据Swift版本,您可能不需要= nil初始值。