在SwiftUI中使用十六进制颜色

在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
)
}
}

发表评论