Protected.swift 522 B

1234567891011121314151617181920212223242526
  1. //
  2. // Protected.swift
  3. // SideMenu
  4. //
  5. // Created by Jon Kent on 2/9/19.
  6. //
  7. import Foundation
  8. internal final class Protected<T: Equatable> {
  9. typealias ConditionBlock = (_ oldValue: T, T) -> T
  10. private var _value: T
  11. private var condition: ConditionBlock
  12. public var value: T {
  13. get { return _value }
  14. set { _value = condition(_value, newValue) }
  15. }
  16. init(_ value: T, when condition: @escaping ConditionBlock) {
  17. self._value = value
  18. self.condition = condition
  19. }
  20. }