Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.67 KB | None | 0 0
  1. @propertyWrapper
  2. struct Clamped<T: Comparable> {
  3.  
  4. var wrappedValue: T {
  5. didSet {
  6. wrappedValue = Self.value(wrappedValue, clampedTo: range)
  7. }
  8. }
  9.  
  10. private let range: ClosedRange<T>
  11.  
  12. init(wrappedValue: T, _ range: ClosedRange<T>) {
  13. self.wrappedValue = Self.value(wrappedValue, clampedTo: range)
  14. self.range = range
  15. }
  16.  
  17. private static func value(_ value: T, clampedTo range: ClosedRange<T>) -> T {
  18. min(max(value, range.lowerBound), range.upperBound)
  19. }
  20. }
  21.  
  22. struct Movie {
  23. @Clamped(0...10) var rating: Double = 0
  24. }
  25.  
  26. let pulpFiction = Movie(rating: 9999)
  27. print(pulpFiction.rating) // sadly only prints 10 :-(
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement