#swift #swiftify
#swift #swiftify
Вопрос:
Я попытался преобразовать следующий блок кода Objective -C в Swift с помощью Swiftify.
#define HEXCOLOR(hex) [UIColor colorWithRed:((float)((hex amp; 0xFF0000) >> 16)) / 255.0 green:((float)((hex amp; 0xFF00) >> 8)) / 255.0 blue:((float)(hex amp; 0xFF)) / 255.0 alpha:1]
Этот код вызывается как:
_contentView.backgroundColor = HEXCOLOR(0x24B491);
Вот вывод преобразованного кода
func HEXCOLOR(_ hex: Any) -> UIColor {
UIColor(red: CGFloat((Float((hex amp; 0xff0000) >> 16)) / 255.0), green: CGFloat((Float((hex amp; 0xff00) >> 8)) / 255.0), blue: CGFloat((Float(hex amp; 0xff)) / 255.0), alpha: 1)
}
Преобразование кода кажется правильным во всех частях, за исключением типа входного параметра функции.
P.S. Есть много GitHub gists, которые преобразуют шестнадцатеричную строку в UIColor.
Комментарии:
1.
func hexColor(_ hex: UInt) -> UIColor {
Кстати, нет необходимости преобразовывать значения вFloat
2. @LeoDabus Спасибо, это работает отлично, пожалуйста, оставьте свои комментарии в качестве ответа.
Ответ №1:
Вам просто нужно изменить тип шестнадцатеричного параметра с любого на целое число без знака. Кстати, нет необходимости преобразовывать значения в Float.
func hexColor(_ hex: UInt) -> UIColor {
UIColor(red: .init((hex amp; 0xff0000) >> 16) / 255,
green: .init((hex amp; 0xff00) >> 8) / 255,
blue: .init( hex amp; 0xff) / 255,
alpha: 1)
}
hexColor(0x24B491) // r 0.141 g 0.706 b 0.569 a 1.0