CoreData With CloudKit

Integrate your codebase with CloudKit is actually a tricky stuff for me since the first impression the CloudKit gave me several years ago is not good.

In recent days, I had to cope with this bad feeling (Never mind, CloudKit) in the development of Sideloader.

CoreData is not an easy-API framework, as we all know. However, CloudKit defeats CoreData. You can imagine how frustrated I felt when I first use CloudKit to synchronize data stored in local CoreData.

获取某个 Mac 应用的 BundleID

我们知道无论是 iOS 还是 macOS 上的应用,其配置信息都是通过 plist 文件组织的,该应用的 BundleID 就藏在这个文件中,通过读取 plist 文件就能够知道其 Bundle ID 以及应用版本号等信息。我们以 App Store.app 为例,其 plist 文件就存储在如下路径,其他应用也是如此。

Alamofire 和 RxSwift 中的 .af 以及 .rx 扩展是怎么实现的

今天继续来一篇水文,关于 Alamofire 和 RxSwift 两个组件中扩展后缀 .af 以及 .rx 是怎么实现的。相信用过的 ( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ 都看过了。我这里权当自己的记录流水账了。

Swift 中的消息派发

What is the method dispatch

什么是消息派发?

消息派发,英文名称 Method Dispatch,是指程序在运行过程中调用某个方法的时候决议使用哪个具体指令的过程。消息派发的行为在我们代码中时时刻刻的在发生。了解消息派发的机制对于我们日常写出相对高效的代码也是有利的,日常 Coding 的时候遇到一些派发相关的问题,也能做到心里有数。

Protocol Extension

Protocol 作为 Swift 生态的最重要的组成部分(没有之一),其搭建起了整个语言生态的各个组成部分。

相对于继承而言,Protocol 的几个比较直观的优势:

  1. 无需必须去强制继承某个类;
  2. 通过协议可以改造已经存在的类型;
  3. 适用范围更大一些,使得 struct 和 enum 这些值类型也能够继承能力
  4. Swift 语言本身是不支持多继承的,你需要花费精力去纠结继承哪个 class,一旦出现不同的能力分散在不同父类的情况,就更加纠结了,你甚至需要去修改原有的父类;
  5. 继承的话,还需要考虑 override 父类方法的问题,比如调用 super 方法的时机问题;

这篇文章想记录下 Protocol Extension 中的一点区别。