摸鱼精选第 4 期
Swift 在 58 安居客房产实践
大厂的代码基本上都是在已有的 OC 工程里面加入 Swift 混合编程,本文总结了在 OC 和 Swift 混编遇到的一些问题。
- Swift 调用 OC 的 framework,必需开启 Module 模式,否则无法 import
- OC 反射时需要注意,Swift 的生成的 Class String 是"ModuleName.ClassName"的格式,NSClassFromString 无法对应到 OC 的类。可以在 Swift 的类增加注解@objc(ClassName),指定 OC 的类名即可。
常见内网穿透工具使用总结
本文介绍了几个内网穿透工具:
RabbitMQ,RocketMQ,Kafka 事务性,消息丢失和消息重复发送的处理策略
本文重点关注分布式的一致性,介绍了三者是如何处理分布式事务的,以及在消息防丢失、消息持久化的不同。
错误处理原则及其在 Swift 中的应用
常见的错误处理方案:
- 运行时错误
- 错误码
- 异常
- 代数数据类型
其中运行时错误常见的就是fatalError
之类的。
错误码就是 NSError 之类的,根据 code 判断不同的错误。
关于异常和错误码的讨论就没停止过,但作者认为“对于调用方来说异常要么被传递,要么被显示处理 ,可靠性得到了保证。中间的调用方如果不需要处理异常,仅仅使用 try 就可以,避免了对主流程的影响,易用性非常好。总的来说,异常比错误码在可靠性和易用性都可以做的更好”。
Swift 5.5 的 async/await
最低支持 iOS 13 版本,结合异常是非常丝滑的。
在使用 Future/Promise
时,统一结果和错误是比较常见的做法,如 Result<Element, Error>
。
探索 Flutter 中线程模型/消息循环的底层逻辑
作者通过阅读 Flutter 引擎 C++源码来窥探 4 种 Task Runner 的具体实现:
- Platform Task Runner :对应平台如 Android/iOS 的 UI/Main Thread。
- UI Task Runner:所有 Dart Framework 层的代码均在此现场执行。
- Raster Task Runner:真正执行渲染任务,光栅化所有从 UI Task Runner 中提交过来的任务,最终渲染到屏幕上。
- IO Task Runner:通常执行耗时计算任务,例如下载/解码远程图片,再交给 Raster Task Runner 渲染。