小编Ram*_*att的帖子

如何从Swift 4的Codable中排除属性

Swfit 4的新Encodable/ Decodable协议使JSON(de)序列化非常令人愉快.但是,我还没有找到一种方法可以对哪些属性进行编码以及应该解码哪些属性进行细粒度控制.

我注意到从附带的CodingKeysenum中排除属性完全排除了该属性,但有没有办法进行更细粒度的控制?

json swift codable

68
推荐指数
4
解决办法
2万
查看次数

Swift的JSONDecoder在JSON字符串中有多种日期格式?

Swift JSONDecoder提供了一个dateDecodingStrategy属性,允许我们根据DateFormatter对象定义如何解释传入的日期字符串.

但是,我目前正在使用一个API,它返回date strings(yyyy-MM-dd)和datetime strings(yyyy-MM-dd HH:mm:ss),具体取决于属性.有没有办法JSONDecoder处理这个,因为提供的DateFormatter对象一次只能处理dateFormat一个?

一个火腿解决方案是重写附带的Decodable模型,只接受字符串作为其属性,并提供公共Dategetter/setter变量,但这对我来说似乎是一个糟糕的解决方案.有什么想法吗?

json-deserialization swift codable

21
推荐指数
5
解决办法
7545
查看次数

可解码 - 继承阻止解码器init合成

我有以下Swift 4 Codable类,它继承自Realm的Object类型:

final class SearchResult: RealmSwift.Object, Codable {
    @objc dynamic var name: String = ""
    @objc dynamic var region: String = ""

    enum CodingKeys: String, CodingKey {
        case name = "name"
        case region = "region"
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的期望是该init(from decoder: Decoder)方法被合成,所以我不必自己实现它,这是一个巨大的便利.但是,不实现这会产生以下编译器错误:

super.init isn't called on all paths before returning from initializer

有三种方法可以摆脱编译器错误,但没有一种方法是好的:

  1. 实现一个init(from decoder: Decoder)只调用的空方法super.init().这似乎阻止了合成,意味着没有任何实际解码,因为它只是一个空方法.

  2. init(from decoder: Decoder)手动实现整个方法.这有效,但现在使用的乐趣Codable几乎消失了.

  3. 删除所有与Realm相关的代码.现在Codable按预期工作,但是,现在我不能再使用Realm了.

这对我来说似乎是一个Swift错误,因为它应该检测到init(from decoder: Decoder)实际上是在实现,而不是手动执行.

我不知道的任何建议或解决方法?

realm swift swift4 codable

12
推荐指数
1
解决办法
1102
查看次数

Chromecast接收器 - 帧速率极差

我们在Chromecast上遇到了播放保真度方面的严重问题.在接收器上使用CAF或v2的最基本实现,视频可能每秒2帧,显示许多伪像.我们正在使用HLS(通过Akamai提供服务).经过一些研究,这就是我们所知道的:

  • 在AVPlayer(iOS),EXOPlayer(Android)和Clapper(web)上,相同的HLS流没有问题.
  • 在转换底层mp4文件(未分段)时,chromecast可以很好地处理它.
  • 问题不在于缓冲本身(buffering播放器状态不是,播放器上没有缓冲图标,互联网连接是固定的)
  • 当强制chromecast使用来自m3u8清单(240p)的最低质量视频时,播放器表现更好(但仍然不完美).

目前,在我们看来,HLS段没有得到正确处理(而大多数玩家处理得很好).有什么办法可以解决这个问题吗?我们的产品取决于高品质的Chromecast体验.

android ios google-cast chromecast

6
推荐指数
0
解决办法
172
查看次数