无法将字符串 hex 转换为 hexint,然后再转换为 UIColor
Cant convert string hex into hexint and then into UIColor
我有 JSON 个包含字符串数组的数据。当我解码这些数据时,我需要将字符串转换为整数,然后使用它来创建 UIColors。但是当我将我的十六进制从字符串转换为 int 时 returns 我的颜色错误。
这里的代码
struct DrawingElement {
let colorsForCells: [UIColor]
}
extension DrawingElement: Decodable {
enum CodingKeys: String, CodingKey {
case colorsForCells = "cells"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let rawColors = try container.decode([String].self, forKey: .colorsForCells)
colorsForCells = rawColors.map {
let value = Int([=10=])
let color = uiColorFromHex(rgbValue: value ?? 77)
return color == .black ? .white : color
}
}
}
func uiColorFromHex(rgbValue: Int) -> UIColor {
let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 0xFF
let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 0xFF
let blue = CGFloat(rgbValue & 0x0000FF) / 0xFF
let alpha = CGFloat(1.0)
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
我的数据字符串示例:“0xe7c79d”
您必须删除 0x
前缀,然后指定基数 16:
let s = "0xe7c79d"
print(Int(s)) // nil
let value = s.hasPrefix("0x")
? String(s.dropFirst(2))
: s
print(Int(value, radix: 16)) // 15189917
我有 JSON 个包含字符串数组的数据。当我解码这些数据时,我需要将字符串转换为整数,然后使用它来创建 UIColors。但是当我将我的十六进制从字符串转换为 int 时 returns 我的颜色错误。 这里的代码
struct DrawingElement {
let colorsForCells: [UIColor]
}
extension DrawingElement: Decodable {
enum CodingKeys: String, CodingKey {
case colorsForCells = "cells"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let rawColors = try container.decode([String].self, forKey: .colorsForCells)
colorsForCells = rawColors.map {
let value = Int([=10=])
let color = uiColorFromHex(rgbValue: value ?? 77)
return color == .black ? .white : color
}
}
}
func uiColorFromHex(rgbValue: Int) -> UIColor {
let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 0xFF
let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 0xFF
let blue = CGFloat(rgbValue & 0x0000FF) / 0xFF
let alpha = CGFloat(1.0)
return UIColor(red: red, green: green, blue: blue, alpha: alpha)
}
我的数据字符串示例:“0xe7c79d”
您必须删除 0x
前缀,然后指定基数 16:
let s = "0xe7c79d"
print(Int(s)) // nil
let value = s.hasPrefix("0x")
? String(s.dropFirst(2))
: s
print(Int(value, radix: 16)) // 15189917