Guest User

Untitled

a guest
Apr 2nd, 2018
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. func serialize(object: Any) -> [String : Any]? {
  2. let mirror = Mirror(reflecting: object)
  3. guard mirror.displayStyle == .struct || mirror.displayStyle == .class else {
  4. return .none
  5. }
  6.  
  7. var result: [String : Any] = [:]
  8. for case let (label?, value) in mirror.children {
  9. let childMirror = Mirror(reflecting: value)
  10. if let displayStyle = childMirror.displayStyle {
  11. switch displayStyle {
  12. case .`class`:
  13. result[label] = serialize(object: value)
  14. case .collection:
  15. result[label] = Array(childMirror.children.lazy
  16. .map { (_, value) in serialize(object: value) }
  17. .filter { $0 != nil }
  18. .map { $0 as! [String : Any]})
  19. case .dictionary:
  20. result[label] = serialize(object: value)
  21. case .`enum`:
  22. // not supported
  23. break
  24. case .optional:
  25. switch childMirror.children.first {
  26. case let .some((.some("some"), childValue)):
  27. result[label] = serialize(object: childValue) ?? childValue
  28. default:
  29. result[label] = NSNull()
  30. }
  31. break
  32. case .set:
  33. result[label] = Array(childMirror.children.lazy
  34. .map { (_, value) in serialize(object: value) }
  35. .filter { $0 != nil }
  36. .map { $0 as! [String : String]})
  37. case .`struct`:
  38. result[label] = serialize(object: value)
  39. case .tuple:
  40. // not supported
  41. break
  42. }
  43. } else {
  44. result[label] = "\(value)"
  45. }
  46. }
  47.  
  48. return result
  49. }
  50.  
  51. let user = User(
  52. email: "guidomb@gmail.com",
  53. password: "asdasd",
  54. friends: [
  55. User(email: "anita@gmail.com", password: "123456"),
  56. User(email: "luciano@gmail.com", password: "asd123456")
  57. ]
  58. )
  59. print(serialize(object: user))
Add Comment
Please, Sign In to add comment