第十五章:给 Swift 原住民的生存指南

15.1 别找了,没有 varlet

在 OC 里,变量就是变量,它总是可变的(除非你用 const,但很少人用)。

  • Swift: let name = "Jack"
  • OC: NSString *name = @"Jack"; (注意那个 *,那是你的命)

那个星号 * 意味着这是一个指针。 Swift 帮你隐藏了引用类型的本质,但 OC 把内脏都掏出来给你看。 如果你忘了写 *,比如 NSString name,编译器会觉得你想在栈上创建一个对象,然后报错报到你怀疑人生。

15.2 为什么要有两个文件?

Swift: class Person { ... } (一个文件搞定) OC: Person.h + Person.m

试着去欣赏这种分离。 .h 是你对外承诺的接口。 .m 是你不想让人看见的脏乱差的代码。 当你只想知道这个类怎么用时,看 .h 就够了。这是一种强制的文档化。

15.3 字符串的坑

  • Swift: String 是值类型。
  • OC: NSString 是不可变引用类型,NSMutableString 是可变引用类型。

如果你把一个 NSMutableString 传给了一个属性,而那个属性是从 copy 声明的,那么它变成了一个 NSString(不可变)。如果你试图修改它,Crash。

15.4 最后的建议

不要试图把 OC 写成 Swift。 不要到处用点语法(除了属性访问)。 试着去感受“发消息”的禅意。

使用 Hugo 构建
主题 StackJimmy 设计