我想存储要用于绘图的backColor
属性。如何使此属性采用Color或LinearGradient?
struct Card {
let backColor: Color
}
let colorBackCard = Card(backColor: Color.red)
let gradientBackCard = Card(backColor: LinearGradient(...))
显示的最后一行代码:无法将'LinearGradient'类型的值转换为预期的参数类型'Color'。
如何修复此属性?
谢谢
-
我尝试过:
enum ColorGradient {
case color(Color)
case gradient(LinearGradient)
}
struct Card {
let backColor: ColorGradient
}
let colorBackCard = Card(backColor: ColorGradient.color(Color.red))
let gradientBackCard = Card(backColor: ColorGradient.gradient(LinearGradient(...)))
但是当我使用此属性在View中绘制时,它报告:
实例方法'background(_:alignment :)'要求'ColorGradient'符合'View']
-
我现在使用2个单独的变量颜色?和LinearGradient?。
如果直接在视图中使用它,那么下面的方法会更合适
struct Card<Background: View> {
let backColor: Background
}
// no changes in below
let colorBackCard = Card(backColor: Color.red)
let gradientBackCard = Card(backColor: LinearGradient(...))
您可以通过AnyView类型擦除来做到这一点
enum ColorGradient {
case color(Color)
case gradient(LinearGradient)
}
struct Card {
let backColor: ColorGradient
var backgroundColor: some View {
switch backColor {
case let .color(color):
return AnyView(color)
case let .gradient(linearGradient):
return AnyView(linearGradient)
}
}
}