这方便的意思是什么?

时间:2016-01-25 02:32:06

标签: ios variable-assignment

_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”可以通过此分配?

1 个答案:

答案 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),并且在该上下文之外并不常见。