Swift Decodable 的失败初始化器
A failable initialiizer for Swift Decodable
我正在尝试解析以下 json 架构,海报可能为空也可能不为空
{
"poster": {},
"recommends": []
}
我的解码类如下:
public struct RecommendedList: Decodable {
public let poster: Poster?
public let recommends: [Recommend]
}
public struct Poster: Decodable {
public let backgroundImage: URL
public let topImage: URL
public let windowImage: URL
public let windowSkinImagePath: URL
public let deeplink: URL
public init(from decoder: Decoder) throws {
// I want a failable intializer not one that throws
}
}
我的问题是如何将海报设为可选?我的想法是我需要一个可失败的初始化器,但 decodable 需要一个抛出的初始化器。
看来我需要添加一个尝试?在推荐列表中 init(from decoder:)
public struct RecommendedList: Decodable {
public let poster: Poster?
public let recommends: [Recommend]
enum CodingKeys: String, CodingKey {
case poster
case recommends
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
poster = try? container.decode(Poster.self, forKey: .poster)
recommends = try container.decode([Recommend].self, forKey: .recommends)
}
}
我正在尝试解析以下 json 架构,海报可能为空也可能不为空
{
"poster": {},
"recommends": []
}
我的解码类如下:
public struct RecommendedList: Decodable {
public let poster: Poster?
public let recommends: [Recommend]
}
public struct Poster: Decodable {
public let backgroundImage: URL
public let topImage: URL
public let windowImage: URL
public let windowSkinImagePath: URL
public let deeplink: URL
public init(from decoder: Decoder) throws {
// I want a failable intializer not one that throws
}
}
我的问题是如何将海报设为可选?我的想法是我需要一个可失败的初始化器,但 decodable 需要一个抛出的初始化器。
看来我需要添加一个尝试?在推荐列表中 init(from decoder:)
public struct RecommendedList: Decodable {
public let poster: Poster?
public let recommends: [Recommend]
enum CodingKeys: String, CodingKey {
case poster
case recommends
}
public init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
poster = try? container.decode(Poster.self, forKey: .poster)
recommends = try container.decode([Recommend].self, forKey: .recommends)
}
}