在 Swift 中枚举属性的 didSet 中,可以检查新值是否与旧值相同



给定以下示例:

enum ViewState {
    case idle
    case loading
    case caseWithAssociatedValue(String)    
}
class View {
    private var state: ViewState = .idle
    func setState(to state: ViewState) {
        guard state != self.state else { return }
        self.state = state
    }
}

我无法比较 ViewState 类型的两个属性,并且我无法使用原始值进行比较,因为我的一个案例具有关联的值。

我正在寻找一种检查新值的状态是新值还是与当前值相同的方法。这可能吗?

使用 willSet 并执行以下操作

enum State : Equatable {
  case idle
  case active
  case done(String)
}
class test {
  var x: State {  
    willSet {
      if x != newValue {
        print("(x) -> (newValue)")
      }
    }
  }
  init(_ x: State) {
    self.x = x
  }
}
let t = test(State.idle)
t.x = State.active
t.x = State.done("We're done")

输出为
空闲 ->活动
active -> done("we're done"(

最新更新