Ios 这是什么意思? \u labelView=({ UIView*labelView=[[UIView alloc]initWithFrame:CGRectMake(0,0,_midView.frame.size.width,_midView.frame.size.height)]; 对于(int i=0;i

Ios 这是什么意思? \u labelView=({ UIView*labelView=[[UIView alloc]initWithFrame:CGRectMake(0,0,_midView.frame.size.width,_midView.frame.size.height)]; 对于(int i=0;i,ios,variable-assignment,Ios,Variable Assignment,为什么“labelView”可以通过这个赋值?这是一个复合语句,用括号括起来,用作表达式。以下是模式的GCC描述: 括号中的复合语句可能在GNU C中显示为表达式。这允许您在表达式中使用循环、开关和局部变量 回想一下,复合语句是由大括号包围的语句序列;在此构造中,括号围绕大括号。例如: _labelView = ({ UIView * labelView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, _midView.frame.size

为什么“labelView”可以通过这个赋值?

这是一个复合语句,用括号括起来,用作表达式。以下是模式的GCC描述:

括号中的复合语句可能在GNU C中显示为表达式。这允许您在表达式中使用循环、开关和局部变量

回想一下,复合语句是由大括号包围的语句序列;在此构造中,括号围绕大括号。例如:

_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;
});
对于
foo()
的绝对值,是一个有效的(尽管比必要的稍微复杂)表达式

复合语句中的最后一件事应该是后跟分号的表达式;此子表达式的值用作整个构造的值。(如果在大括号中使用其他类型的last语句,则构造的类型为void,因此实际上没有值。)


语句表达式最常见的用法是在
#define
宏中(请参阅),在该上下文之外不常见

\u labelView
的声明类型是什么?我不确定它是否可以,labelView不是什么,最后一行
({ int y = foo (); int z;
    if (y > 0) z = y;
    else z = - y;
    z; })