Pra*_*iya 10 ios swift4 codable
我遵循了按预期工作的 Codable 结构
struct VideoAlbum: Codable {
let id, image: String?
let video, mediaType: JSONNull?
let type, deleted, createdOn: String?
let modifiedOn: JSONNull?
enum CodingKeys: String, CodingKey {
case id, image, video
case mediaType = "media_type"
case type, deleted
case createdOn = "created_on"
case modifiedOn = "modified_on"
}
}
Run Code Online (Sandbox Code Playgroud)
// MARK: 编码/解码助手
class JSONNull: Codable {
public init() {}
public required init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if !container.decodeNil() {
throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
}
}
public func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
try container.encodeNil()
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要添加不是来自 API 的自定义属性来跟踪视频位置,所以我修改了它
struct VideoAlbum: Codable {
let id, image: String?
let video, mediaType: JSONNull?
let type, deleted, createdOn: String?
let modifiedOn: JSONNull?
var isPlaying:Bool? // CUSOTM PROPERTY
var currentTime:CMTime? // CUSOTM PROPERTY
var timeObserver:Any? // CUSOTM PROPERTY
var pausedByUser:Bool? // CUSOTM PROPERTY
enum CodingKeys: String, CodingKey {
case id, image, video
case mediaType = "media_type"
case type, deleted
case createdOn = "created_on"
case modifiedOn = "modified_on"
case isPlaying,pausedByUser
case currentTime
case timeObserver
}
}
Run Code Online (Sandbox Code Playgroud)
然而它显示
错误类型“VideoAlbum”不符合“Decodable”协议
有没有办法不使用某些属性作为 Codable ?
我知道问题是与CMTime和任何我不知道如何解决它
我搜索了很多问题,但所有属性都来自 API,未找到自定义属性 有没有人建议我任何解决方案或替代方法?
Mil*_*sáľ 11
如果您不想解码这 4 个属性,只需不要将它们包含在CodingKeys(并且不要忘记为它们显式提供默认值,以便解码器可以正确初始化对象):
struct VideoAlbum: Codable {
let id, image: String?
let video, mediaType: JSONNull?
let type, deleted, createdOn: String?
let modifiedOn: JSONNull?
var isPlaying: Bool? = nil
var currentTime: CMTime? = nil
var timeObserver: Any? = nil
var pausedByUser: Bool? = nil
enum CodingKeys: String, CodingKey {
// include only those that you want to decode/encode
case id, image, video
case mediaType = "media_type"
case type, deleted
case createdOn = "created_on"
case modifiedOn = "modified_on"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3224 次 |
| 最近记录: |