如何在SwiftUI中将属性定义为Color或LinearGradient?

问题描述 投票:1回答:2

我想存储要用于绘图的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?。

swift user-interface colors swiftui linear-gradients
2个回答
2
投票

如果直接在视图中使用它,那么下面的方法会更合适

struct Card<Background: View> {
    let backColor: Background
}

// no changes in below
let colorBackCard = Card(backColor: Color.red)
let gradientBackCard = Card(backColor: LinearGradient(...))

1
投票

您可以通过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)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.