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

标签 swift enums

<分区>

给定以下示例:

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 类型的两个属性,也无法使用原始值进行比较,因为我的一个案例具有关联值。

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

最佳答案

使用 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")

输出是
空闲 -> 事件
事件 -> 完成(“我们完成了”)

关于swift - 在 Swift 的枚举属性的 didSet 中,是否可以检查新值是否与旧值相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49966523/

相关文章:

jenkins 共享库错误 com.cloudbees.groovy.cps.impl.CpsCallableInvocation

swift - 在 Swift 中循环遍历嵌套堆栈

swift - 如何在 Swift 4 中过滤字符串中的字符

java - 按值查找枚举的正确方法

c++ - 基于模板参数的模板化枚举类型

c# - 在类之间编写共享枚举的最佳实践是什么

python - 在 Cython 代码中定义将在代码的 C 部分中使用的枚举

ios - 在 iOS 15 中仅使用 StoreKit2 时是否必须提供 "Restore Purchases"选项?

swift - 当我尝试检索 TextField 输入时出现 EXC_BAD_INSTRUCTION 错误

swift - 使用自动布局时如何确定 Root View 中 UIView 的框架?