2016-01-25 111 views
2
_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

'_labelView'的聲明類型是什麼? – dasblinkenlight

+0

我不確定它是否可以 – anhtu

+0

labelView不是什麼,最後一行 – JokerV

回答

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)在這種情況之外並不常見。