gpt4 book ai didi

swift - 在 SwiftUI 中使用另一个 @State 属性值初始化 @State 属性

转载 作者:行者123 更新时间:2023-12-03 08:40:48 25 4
gpt4 key购买 nike

我正在尝试根据另一个值获取进度条的进度值。这两个变量(waterQuantity 和进度)都在属性包装器 @State

这是我的代码:

struct CircularProgressBar: View {
@State var waterQuantity: Int
@State var progress: Float = (1 + (Float(waterQuantity)/Float(1500))) * 100

var body: some View {
ZStack {
Circle()
.foregroundColor(.white)
.padding(25)
.overlay(
Circle()
.trim(from: 0.0, to: CGFloat(min(self.progress, 1.0)))
.stroke(style: StrokeStyle(lineWidth: 25
, lineCap: .round, lineJoin: .round))
.foregroundColor(Color.blue)
.rotationEffect(Angle(degrees: 270.0))
.animation(.linear)
.padding(50)
)

VStack {
Text(String(format: "%.0i mL", 500))
.font(.largeTitle)
.bold()
.foregroundColor(Color("bgStart"))
Text("1500 mL")
.foregroundColor(.gray)
}
}
}

如您所见,我无法使用另一个尚未初始化的变量来初始化进度。我尝试使用 init() 和 mutating func 传递值,但这些解决方案都不适合我 😕

最佳答案

您应该将进度更改为不存储任何值的计算属性,而是根据 waterQuantity 的值动态计算其值:

var progress: Float {
Float(waterQuantity)/Float(1500)
}

现在,当更新 waterQuantity 时,您的 View 仍将被重绘,因为 waterQuantity 在此计算属性内使用,而该属性又在您的 View 中使用。

关于swift - 在 SwiftUI 中使用另一个 @State 属性值初始化 @State 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62861609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com