Вам, вероятно, просто нужен Список, не ArrayList. В этом случае можно просто сделать:
List<Element> arraylist = Arrays.asList(array);
Лучшим вариантом может быть золотая середина. Вы можете определить либо обычную функцию 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);
, вы можете столкнуться с проблемами.
Последний фрагмент кода, безусловно, наиболее читаемый, но, вероятно, наименее переносимый - вы не можете вызвать его просто из любого места в вашей программе. .
В общем, я бы посоветовал преобразовать ваш макрос в функцию и оставить все как есть.
Я обычно рекомендую функции а не сложные #defines. Если встраивание приносит реальную пользу, компилятор обычно сделает это за вас. #defines затрудняют отладку, особенно когда они сложные (а эта).
Но нет ничего плохого в использовании здесь функции. Единственная придирка, которую я бы сказал, это то, что вам следует использовать CGFloat, а не float, но нет ничего плохого в шестнадцатеричной нотации, если вам так удобнее. Если у вас их много, я вижу, где может быть удобно использовать цветовую нотацию в Интернете. Но избегайте макросов.
Имхо, метод UIcolor более читабелен. Я думаю, что макросы - это здорово, если они решают проблему; т.е. обеспечить большую производительность и / или читаемый код.
Мне непонятно, в чем преимущество использования макроса в этом случае, поэтому я предпочел бы второй вариант.
Имейте в виду, что 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];