Home > Net >  Unable to change the value of a @State variable in swift?
Unable to change the value of a @State variable in swift?

Time:02-23

Swift 5.x iOS 15

Just playing around with an idea and hit a roadblock? Why can I not change the value of this state variable in this code?

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
  }
}

The line rexShape.height is telling me height is a get-only property? which makes no sense to me cause rexShape should be a variable? Am I simply losing my mind...

CodePudding user response:

If you pay close attention to the error message, the compiler isn't complaining about rexShape not being mutable, but about CGRect.height not being mutable.

To change the only height or weight of a CGRect, you need to do it via its size property.

rexShape.size.height -= 10
  • Related