如何在 LinearGradient 初始值设定项中使用变量 - SwiftUI

How to use variables inside LinearGradient initializer - SwiftUI

我试图在稍后使用 cardGradient 的结构中执行此操作。 “1a”和“1b”是资产文件夹中的颜色。

var color1 = "1a"
var color2 = "1b"

let cardGradient = LinearGradient(gradient: Gradient(colors: 
[Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing)

Cannot use instance member 'color1' within property initializer; property initializers run before 'self' is available.

Cannot use instance member 'color2' within property initializer; property initializers run before 'self' is available

//

Solution: Thanks for the help!

var color1 = "1a"
var color2 = "1b"

VStack {
     // ... some views here
}
.background(LinearGradient(gradient: Gradient(colors: 
[Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing))

我不确定在 phone 上创建 LinearGradient 的强度如何,但如果这不是问题,您可以将 LinearGradient 设为计算变量:

var color1 = "1a"
var color2 = "1b"

let cardGradient: LinearGradient {
    LinearGradient(gradient: Gradient(colors: [Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing)
}

如果它占用大量计算资源,你可以将其设置为可选(或给它一个默认值)并在视图的 .onAppear 中设置它,但是你必须制作渐变@State:

var color1 = "1a"
var color2 = "1b"
@State var cardGradient: LinearGradient?

var body: some View {
    VStack {
        // ... some views here
    }.onAppear {
        self.cardGradient = LinearGradient(gradient: Gradient(colors: [Color(color1), Color(color2)]), startPoint: .leading, endPoint: .trailing)
    }
}

请记住,如果颜色经常变化,这两种解决方案都不是特别好,但您不希望在颜色变化时进行渐变更新,但这听起来不是问题为你。如果您发现第一个选项滞后,请使用第二个选项。