Макрос лучше, чем UIColor для того, чтобы выбрать цвет RGB?

Вам, вероятно, просто нужен Список, не ArrayList. В этом случае можно просто сделать:

List<Element> arraylist = Arrays.asList(array);
5
задан Tim 7 August 2009 в 06:41
поделиться

4 ответа

Лучшим вариантом может быть золотая середина. Вы можете определить либо обычную функцию C, либо функцию objective-C, чтобы делать то, что сейчас делает ваш макрос:

// As a C function:
UIColor* UIColorFromRGB(NSInteger rgbValue) {
    return [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0
                           green:((float)((rgbValue & 0xFF00) >> 8))/255.0
                            blue:((float)(rgbValue & 0xFF))/255.0
                           alpha:1.0];
}

// As an Objective-C function:
- (UIColor *)UIColorFromRGB:(NSInteger)rgbValue {
return [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0
                       green:((float)((rgbValue & 0xFF00) >> 8))/255.0
                        blue:((float)(rgbValue & 0xFF))/255.0
                       alpha:1.0];
}

Однако, если вы решите придерживаться макроса, вы должны заключить в скобки rgbValue везде, где он появляется . Если я решу вызвать ваш макрос с помощью:

UIColorFromRGB(0xFF0000 + 0x00CC00 + 0x000099);

, вы можете столкнуться с проблемами.

Последний фрагмент кода, безусловно, наиболее читаемый, но, вероятно, наименее переносимый - вы не можете вызвать его просто из любого места в вашей программе. .

В общем, я бы посоветовал преобразовать ваш макрос в функцию и оставить все как есть.

12
ответ дан 18 December 2019 в 05:16
поделиться

Я обычно рекомендую функции а не сложные #defines. Если встраивание приносит реальную пользу, компилятор обычно сделает это за вас. #defines затрудняют отладку, особенно когда они сложные (а эта).

Но нет ничего плохого в использовании здесь функции. Единственная придирка, которую я бы сказал, это то, что вам следует использовать CGFloat, а не float, но нет ничего плохого в шестнадцатеричной нотации, если вам так удобнее. Если у вас их много, я вижу, где может быть удобно использовать цветовую нотацию в Интернете. Но избегайте макросов.

1
ответ дан 18 December 2019 в 05:16
поделиться

Имхо, метод UIcolor более читабелен. Я думаю, что макросы - это здорово, если они решают проблему; т.е. обеспечить большую производительность и / или читаемый код.

Мне непонятно, в чем преимущество использования макроса в этом случае, поэтому я предпочел бы второй вариант.

0
ответ дан 18 December 2019 в 05:16
поделиться

Имейте в виду, что 33! = 0x33. Первое - десятичное представление, второе - шестнадцатеричное. Они оба действительны, но разные. Второй вариант должен выглядеть так:

cell.textColor = [UIColor colorWithRed:0x66/255.0
                             green:0x33/255.0
                              blue:0x33/255.0
                             alpha:1.0];

или

cell.textColor = [UIColor colorWithRed:102/255.0
                             green:51/255.0
                              blue:51/255.0
                             alpha:1.0];
0
ответ дан 18 December 2019 в 05:16
поделиться