塊檢索值是像功能的可運行的東西,基本上是一段代碼,你可以存儲,傳遞,然後運行(或不運行)。你想傳遞一個整數到objectAtIndex:
,所以傳遞一個塊絕對沒有任何意義。
什麼你可能意味着需要做的就是運行塊,然後通過其結果到objectAtIndex:
。在這種情況下,你必須運行塊:
TrailLayer * layer = [_layers objectAtIndex:^{
if (_segmentNumber < [_segmentArray count]) {
return _segmentNumber;
} else {
return _segmentNumber - 1;
}
}()]; // <-- run the block
然而,定義一個塊(這是一個全面的目標,並做了很多花哨的東西),僅立即運行是有點傻。如果你想只能夠使用一段代碼作爲表達式,你可以使用由GCC和LLVM支持「語句表達」語言的擴展:
TrailLayer * layer = [_layers objectAtIndex:({
int result;
if (_segmentNumber < [_segmentArray count]) {
result = _segmentNumber;
} else {
result = _segmentNumber - 1;
}
result;
})];
不過說真的,你應該只是做一個常規的C在這種情況下的條件表達式:
TrailLayer * layer = [_layers objectAtIndex:
_segmentNumber < [_segmentArray count] ?
_segmentNumber : _segmentNumber - 1];
我認爲這是錯誤的'返回_segmentNumber - 1;'假設'segmenNumber'是遠大於陣列數... – Stas
對此事的事實,我知道_segmentNumber能只比陣列數大1。 –
這裏有什麼問題? –