最近开始工作了,为了配合队友,得写 Objective-C。写 Objective-C 的时候,有一个糟心的地方就是定义一个变量的时候:写下一个变量之前,首先映入我的脑海的是如何优雅地命名这个变量,但我却要先写它的类型;而且这个类型还经常需要写两遍,当这种重复的事情做多了,很容易烦躁起来;还有那个星号。

1
2
UIView *anElegantView = [UIView new];
WaitASecICantRememberThatRightNow *something = array.firstObject;

所幸的是,从 PSPDFKit 团队的文章 Even Swiftier Objective-C 中可以得知,原来苹果在不知道什么时候给 Objective-C 带来了类型推导,现在我们可以将上面的代码写成:

1
2
3
4
5
__auto_type anElegantView = [UIView new];
__auto_type something = (TheType *)array.firstObject;

// 如果 array 使用了 lightweight generics
__auto_type something = array.firstObject;

这下写法总算和 Swift 相似了一些。PSPDFKit 团队没有停下脚步,又定义了一些宏。

1
2
3
4
5
6
#define let __auto_type const
#define var __auto_type

let anElegantView = [UIView new];
let something = (TheType *)array.firstObject;
var something = array.firstObject;
1
2
3
let anElegantView = UIView()
let something: TheType = array.first
var something = array.first

再给 NSArrayNSMutableArray 加上 map filter 那些,一下子觉得舒服多了。更多更详细的骚操作请看他们的文章。