swift 将setter添加到@State属性不可能吗?

busg9geu  于 2023-06-04  发布在  Swift
关注(0)|答案(2)|浏览(164)

如果将@State var pan: Int改为:

@State var pan: Int {
    set(x) {
      self.pan = min(max((x), -50), 50)
    }
    get {
      return self.pan
    }
  }

我得到错误:Cannot apply property wrapper to computed property.删除@State Package 器后,错误消失。
但是我得到了信息Cannot assign to property: 'self' is immutable
有没有什么方法可以让我两者兼得?

z2acfund

z2acfund1#

长话短说:不,你不能两者兼得。
为什么不简单地使用第二个(计算的)属性

@State private var pan = 0

var panWrapper: Int {
    get { pan }
    set { pan = min(max((newValue), -50), 50) }
 }

或者@Binding

let panBinding = Binding {
    pan
} set: {
    pan = min(max(($0), -50), 50) }
}
hec6srdp

hec6srdp2#

当然,像这样的东西:

struct Content {
    var pan: Int {
    set {
      _pan = min(max((newValue), -50), 50)
    }
    get {
      return _pan
    }
  }
   var _pan: Int = 0

   //mutating func otherLogic(){}
}

struct ContentView : View {

    @State var content = Content()   

    // use content.pan
...

相关问题