我想使用颜色标签使用资产类别日志中的颜色资产 在uikit中,我们可以直接使用color litral,有没有办法在swiftui中使用color litrals
我已经使用uicolor参数从Color初始值设定项中进行搜索,但没有找到
答案 0 :(得分:1)
注意:Beta 5已经为此 提供了一个初始化程序,无需实现它。但是,如果您使用的是早期版本,请借助UIColor
的某些扩展名:
extension UIColor {
var rgba: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return (red, green, blue, alpha)
}
}
然后Color
:
extension Color {
init(_ uiColor: UIColor) {
self.init(red: Double(uiColor.rgba.red),
green: Double(uiColor.rgba.green),
blue: Double(uiColor.rgba.blue),
opacity: Double(uiColor.rgba.alpha))
}
}
然后您可以像这样使用colorLiteral:
Color(#colorLiteral(red: 1, green: 0, blue: 0, alpha: 1))
或任何其他UIColor:
Color(.red)
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以通过在Color
内传递字符串名称来使用资产目录中定义的init
。
因此,如果我的Assets.xcassets
中有“背景”颜色:
我将使用:
let backgroundColor = Color("Background")
或者,如果颜色是在另一个Bundle
中定义的,则可以使用:
Color(name: String, bundle: Bundle)
P.S。看来,Color Literals不适用于Asset颜色的
答案 3 :(得分:0)
您可以使用UIColor的getRed()方法获取红色,绿色,蓝色和Alpha分量,然后使用它们创建一个Color对象。您甚至可以创建为您完成的扩展程序。
答案 4 :(得分:0)
实际上,您可以使用此隐藏协议为Color
提供与UIColor
相同的颜色文字用法:
extension Color: _ExpressibleByColorLiteral {
public init(_colorLiteralRed red: Float, green: Float, blue: Float, alpha: Float) {
self = Color(.sRGB, red: Double(red), green: Double(green), blue: Double(blue), opacity: Double(alpha))
}
}
现在您可以将颜色文字用于Color
参数。
答案 5 :(得分:0)