我是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
类型,但仍然会抱怨。如何摆脱这个错误?
答案 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
初始值。