BorderSide.swift 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. //
  2. // Created by Jake Lin on 12/9/15.
  3. // Copyright © 2015 IBAnimatable. All rights reserved.
  4. //
  5. import Foundation
  6. public enum BorderSide: String {
  7. case top
  8. case right
  9. case bottom
  10. case left
  11. }
  12. public struct BorderSides: OptionSet {
  13. public let rawValue: Int
  14. public static let unknown = BorderSides(rawValue: 0)
  15. public static let top = BorderSides(rawValue: 1)
  16. public static let right = BorderSides(rawValue: 1 << 1)
  17. public static let bottom = BorderSides(rawValue: 1 << 2)
  18. public static let left = BorderSides(rawValue: 1 << 3)
  19. public static let AllSides: BorderSides = [.top, .right, .bottom, .left]
  20. public init(rawValue: Int) {
  21. self.rawValue = rawValue
  22. }
  23. init(rawValue: String?) {
  24. guard let rawValue = rawValue, !rawValue.isEmpty else {
  25. self = .AllSides
  26. return
  27. }
  28. let sideElements = rawValue.lowercased().split(separator: ",")
  29. .map(String.init)
  30. .map { BorderSide(rawValue: $0.trimmingCharacters(in: CharacterSet.whitespaces)) }
  31. .map { BorderSides(side: $0) }
  32. guard !sideElements.contains(.unknown) else {
  33. self = .AllSides
  34. return
  35. }
  36. self = BorderSides(sideElements)
  37. }
  38. init(side: BorderSide?) {
  39. guard let side = side else {
  40. self = .unknown
  41. return
  42. }
  43. switch side {
  44. case .top: self = .top
  45. case .right: self = .right
  46. case .bottom: self = .bottom
  47. case .left: self = .left
  48. }
  49. }
  50. }