Objective-C 奇葩写法合集

内联复合表达式

1
2
3
4
5
UIView *view = ({
UIView *v = [[UIView alloc] init];
v.backgroundColor = [UIColor whiteColor];
v;
});

在创建对象时,使用内联符合表达式是一个很好的技巧。例如在一个视图中创建并初始化很多子视图时,内联符合表达式可以使代码分块,结构上更清晰。

下面这种写法也是合法的:

1
2
3
4
({
UIView *v = [[UIView alloc] init];
v;
}).backgroundColor = [UIColor whiteColor];

最短函数名

1
2
3
4
5
6
-_ {
// do something
return self;
}

[self _];

结构体的初始化

1
2
3
CGRect rect1 = {1, 2, 3, 4};
CGRect rect2 = {.origin.x=5, .size={10, 10}}; // {5, 0, 10, 10}
CGRect rect3 = {1, 2}; // {1, 2, 0, 0}

C 风格函数定义

1
2
3
4
5
int sum(a, b)
int a; int b;
{
return a + b;
}

数组下标初始化

1
2
3
4
5
6
7
const int numbers[] = {
[1] = 66,
[2] = 77,
[3] = 88,
[5] = 99
};
// {0, 66, 77, 88, 0, 99}

字符行多行初始化

也是很常用的技巧,可以让一个很长的字符串字面量通过换行达到提高可读性的效果。

1
2
3
4
NSString *string = @"apple"
@"banana"
@"orange"
@"hello";

效果等价于:

1
NSString *string = @"applebananabughello";

?: 的非主流用法

1
!block ?: block();

效果等价于:

1
2
3
if (block) {
block()
}

参考