_labelView = ({
UIView * labelView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, _midView.frame.size.width, _midView.frame.size.height)];
for (int i = 0;i < titleArr.count ; i++) {
[labelView addSubview:[self returnLabel:titleArr[i] andFrame:CGRectMake(0, i*_height, self.frame.size.width, _height) andColor:[UIColor whiteColor]]];
}
labelView;
});
为什么“labelView”可以通过此分配?
答案 0 :(得分:1)
这是statement expression,括在括号中的复合语句,用作表达式。以下是GCC对模式的描述:
括在括号中的复合语句可能在GNU C中显示为表达式。这允许您在表达式中使用循环,开关和局部变量。
回想一下,复合语句是由大括号包围的一系列语句;在这个结构中,括号围绕括号。例如:
({ int y = foo (); int z; if (y > 0) z = y; else z = - y; z; })
是
foo ()
绝对值的有效(虽然稍微复杂一点)表达式。复合语句中的最后一件事应该是一个后跟分号的表达式;此子表达式的值用作整个构造的值。 (如果你在大括号中最后使用了一些其他类型的语句,那么构造的类型为void,因此实际上没有值。)
语句表达式最常见的用法是在#define
宏中(参见GCC discussion),并且在该上下文之外并不常见。