无法更改 swift 中的 @State 变量的值?
Unable to change the value of a @State variable in swift?
Swift 5.x iOS 15
只是玩弄一个想法却遇到了障碍?为什么我不能在这段代码中改变这个状态变量的值?
struct ContentView: View {
let timer = Timer.publish(every: 0.25, on: .main, in: .common).autoconnect()
@State var rexShape = CGRect(x: 0, y: 0, width: 128, height: 128)
var body: some View {
Arc(startAngle: .degrees(0), endAngle: .degrees(180), clockwise: true)
.stroke(Color.red, lineWidth: 2)
.frame(width: 128, height: 128, alignment: .center)
.onReceive(timer) { _ in
rexShape.height -= 10
}
}
}
struct Arc: Shape {
var startAngle: Angle
var endAngle: Angle
var clockwise: Bool
func path(in rect: CGRect) -> Path {
var path = Path()
path.addArc(center: CGPoint(x: rect.midX, y: rect.midY), radius: rect.width / 2, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise)
return path
}
}
行 rexShape.height 告诉我高度是一个只获取 属性?这对我来说毫无意义,因为 rexShape 应该是一个变量?我只是失去理智了吗...
如果您密切注意错误消息,编译器不会抱怨 rexShape
不可变,而是 CGRect.height
不可变。
要更改 CGRect
中唯一的 height
或 weight
,您需要通过 size
属性.
rexShape.size.height -= 10
Swift 5.x iOS 15
只是玩弄一个想法却遇到了障碍?为什么我不能在这段代码中改变这个状态变量的值?
struct ContentView: View {
let timer = Timer.publish(every: 0.25, on: .main, in: .common).autoconnect()
@State var rexShape = CGRect(x: 0, y: 0, width: 128, height: 128)
var body: some View {
Arc(startAngle: .degrees(0), endAngle: .degrees(180), clockwise: true)
.stroke(Color.red, lineWidth: 2)
.frame(width: 128, height: 128, alignment: .center)
.onReceive(timer) { _ in
rexShape.height -= 10
}
}
}
struct Arc: Shape {
var startAngle: Angle
var endAngle: Angle
var clockwise: Bool
func path(in rect: CGRect) -> Path {
var path = Path()
path.addArc(center: CGPoint(x: rect.midX, y: rect.midY), radius: rect.width / 2, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise)
return path
}
}
行 rexShape.height 告诉我高度是一个只获取 属性?这对我来说毫无意义,因为 rexShape 应该是一个变量?我只是失去理智了吗...
如果您密切注意错误消息,编译器不会抱怨 rexShape
不可变,而是 CGRect.height
不可变。
要更改 CGRect
中唯一的 height
或 weight
,您需要通过 size
属性.
rexShape.size.height -= 10