Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.66 KB | None | 0 0
  1. @propertyWrapper
  2. struct Expirable<Value: ExpressibleByNilLiteral> {
  3.  
  4. let duration: TimeInterval
  5. private var expirationDate = Date()
  6. private var innerValue: Value = nil
  7.  
  8. private var hasExpired: Bool {
  9. expirationDate < Date()
  10. }
  11.  
  12. init(duration: TimeInterval) {
  13. self.duration = duration
  14. }
  15.  
  16. var value: Value {
  17. get {
  18. hasExpired ? nil : innerValue
  19. }
  20. set {
  21. expirationDate = Date().addingTimeInterval(duration)
  22. innerValue = newValue
  23. }
  24. }
  25.  
  26. }
  27.  
  28. struct Tokens {
  29. @Expirable(duration: 3) static var authentication: String?
  30. }
  31.  
  32. Tokens.authentication = "abc"
  33.  
  34. sleep(2)
  35. Tokens.authentication // "abc"
  36. sleep(2)
  37. Tokens.authentication // nil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement