在UIKit中,我们可以使用一个扩展来设置几乎所有东西的十六进制颜色。
https://www.hackingwithswift.com/example-code/uicolor/how-to-convert-a-hex-color-to-a-uicolor
但是当我尝试在SwiftUI上执行此操作时,这是不可能的,看起来SwiftUI没有将UIColor作为参数
文本(Text)
.color(UIColor.init(十六进制:“FFF”))
错误消息:
无法将“UIColor”类型的值转换为预期的参数类型“Color”
我甚至试着为Color做一个扩展,而不是UIColor,但我一点运气都没有
我的颜色扩展:
导入快捷键
扩展颜色{
init(十六进制:字符串){
let scanner=扫描仪(字符串:十六进制)
scanner.scanLocation=0
变量rgbValue:UInt64=0
scanner.scanHexInt64(&;rgbValue)
设r=(RGB值&;0xff0000)>;>;16
设g=(rgbValue&;0xff00)>;>;8
设b=rgbValue&;0xff
self.init(
红色:CGFloat(r)/0xff,
绿色:CGFloat(g)/0xff,
蓝色:CGFloat(b)/0xff,alpha:1
)
}
}
错误消息:
调用中的参数标签不正确(应为“红色:绿色:蓝色:alpha:”,应为“红色:绿色:蓝色:不透明度:”)
您就快到了,您使用了错误的初始化器参数:
扩展颜色{
init(十六进制:字符串){
设hex=hex.trimmingCharacters(in:CharacterSet.alphanumerics.inversed)
变量int:UInt64=0
扫描仪(字符串:十六进制)。scanHexInt64(&;int)
设a,r,g,b:UInt64
开关十六进制计数{
案例3://RGB(12位)
(a、r、g、b)=(255,(int>;8)*17,(int>;4&0xF)*17,(int>;0xF)*17)
案例6://RGB(24位)
(a,r,g,b)=(255,int>;16,int>;8&0xFF,int&0xFF)
案例8://ARGB(32位)
(a、r、g、b)=(int>;>;24、int>;>;16和0xFF、int>;>;8和0xFF、int和0xFF)
违约:
(a,r,g,b)=(1,1,1,0)
}
self.init(
.sRGB,
红色:双(r)/255,
绿色:双(g)/255,
蓝色:双(b)/255,
不透明度:双(a)/255
)
}
}