Как я могу преобразовать шестнадцатеричное значение RGB в UIColor в Swift?

#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