Skip to content

Instantly share code, notes, and snippets.

@kemchenj
Last active November 24, 2019 18:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kemchenj/5cd4bc422d8d0c2da86c14645cf9bac8 to your computer and use it in GitHub Desktop.
Save kemchenj/5cd4bc422d8d0c2da86c14645cf9bac8 to your computer and use it in GitHub Desktop.
Swift 与 Objective-C

Objective-C 的核心是消息机制,当年想要解答的问题是“什么是面向对象”,其实我觉得 Objective-C 是更加纯粹和理想化的面向对象,而 C 是它实用主义的一面。

消息机制带来的是低耦合,极度灵活的的函数调用,可以很便捷地 hack 掉 SDK 的内部实现,亦或者是与其它语言的进行桥接,所以 OC 社区讨论的代码技巧都是围绕着消息机制,各种 Swizzle,各种语言的桥接等等。

但我们的代码里对内的逻辑天生就足够内聚,并不需要这样的灵活性,它更适合去处理对外的,低耦合的场景,例如 rpc,微内核,线程通信;而且消息机制的面向对象本质上是面向继承,不容易组合。

Swift 与 OC 的差异代表着这些年编译器和类型理论的进步,在类型论的基础上搭建范型,Nullability,Mutability,错误处理,还有以后可能会有的 async/await,都是在把之前代码逻辑里的东西抽象到语言层面进行处理,并且显式地声明出来,Swift 标准库的核心思路也是使用类型,描述对象。

所以我们的函数签名变得越来越长,难读懂却易使用,Swift 的程序员喜欢面向类型去做文章,strong-type / type-safe 是很多开源库最喜欢使用的词,Swift 程序员会更习惯基于已有的 interface 去做 extension。

小而美,组合是大家最喜欢在 Swift 里做的事情,例如 100mango/SwiftTimer 里的 SwiftCountDownTimer 选择组合,而不是继承。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment