2016-02-02 4 views
0

я наткнулся на строку кода, который меня смутил:Что делает% в этом фрагменте кода?

return [cellSize[indexPath.item % 2] CGSizeValue]; 

Более конкретно: [indexPath.item % 2]

Единственное, что я нашел о % в Xcode основном связаны %@, %f, etc... и спасаясь% в строке. Я также знаю о троичном, но это не так, не так ли? Может кто-нибудь объяснить, что делает эта линия?

Больше контекста, если это необходимо:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    CQTaskPhotosCVCell *cell = (CQTaskPhotosCVCell *)[collectionView cellForItemAtIndexPath:indexPath]; 
    return [cellSize[indexPath.item % 2] CGSizeValue]; 
} 

ответ

4

возвращение [cellSize [indexPath.item% 2] CGSizeValue];

% является modulo operator (остаток после деления).

Принимая % 2, является обычным способом выбора даже против нечетных строк, например. чередовать окраску. В вашем случае это, кажется, выбор из двух разных размеров ячеек (основанных на имени переменной cellSize).

+0

просто любопытно, если бы я должен был что-то вроде '(псевдокода), если ([indexPath.item% 2]) {cell.color = red}' это сделает все остальные клетки красными? Я мобилен, поэтому я не могу возиться – lizzy81

+0

Да, так я обычно вижу этот шаблон. –

0

Это оператор по модулю и вычисляет остаток от операции деления.

Результат оператора/является частным от деления первого операнда на второй; результатом оператора% является остаток.

ИСО/МЭК 9899: ТС3, 6.5.5: 5

2

Для еще пронумерованы indexPath.items, код использует cellSize[0] для определения размера для элемента в indexPath. Для нечетного номера indexPath.items код cellSize[1].

% является оператором modulo (предоставляет остаток после целочисленного деления). При делении на 2 остаток будет всегда равен 0 или 1.

Смежные вопросы