15.1 别找了,没有 var 和 let
在 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。 不要到处用点语法(除了属性访问)。 试着去感受“发消息”的禅意。