Swift:将字符串转换为十六进制颜色代码

Jos*_*osé 3 swift

我已经从我想用来创建UIColor的数据库中生成了用户ID(格式类似于""XzSYoKJaqKYREkdB2dgwt0fLOPP2"").

我找到了几个关于如何使用颜色十六进制代码创建UIColor的解决方案,但我不知道如何从上面的字符串生成颜色十六进制代码(#ffffff).任何帮助将不胜感激,谢谢.

rma*_*ddy 13

用户ID太多,无法为每个可能的用户ID获取唯一的颜色.您最好的选择是找到一种方法将每个用户ID缩小到可能的可用颜色之一,并接受两个用户可能具有相同颜色的事实.

一种可能的解决方案是获取hashValue用户id字符串,然后将其Int减少到可能的16,777,216种颜色之一.

let userId = "XzSYoKJaqKYREkdB2dgwt0fLOPP2" // or whatever the id is
let hash = abs(userId.hashValue)
let colorNum = hash % (256*256*256)
Run Code Online (Sandbox Code Playgroud)

此时colorNum是范围0-0xFFFFFF

您现在可以从中创建颜色colorNum.

let red = colorNum >> 16
let green = (colorNum & 0x00FF00) >> 8
let blue = (colorNum & 0x0000FF)
let userColor = UIColor(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: 1.0)
Run Code Online (Sandbox Code Playgroud)

您需要将此颜色存储在用户的配置文件中,因为hashValue每次运行应用程序时都不保证这一颜色相同.