Advertisement
Guest User

Untitled

a guest
Nov 30th, 2016
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. //
  2. // Deserializable.swift
  3. // MapperDemo
  4. //
  5. // Created by 默司 on 2016/12/1.
  6. // Copyright © 2016年 默司. All rights reserved.
  7. //
  8.  
  9. import Foundation
  10. import SwiftyJSON
  11. import SWXMLHash
  12.  
  13. protocol NodeAccessable {
  14. func child(_ index: Int) -> NodeAccessable
  15. func child(_ key: String) -> NodeAccessable
  16.  
  17. var string: String? { get }
  18. var bool: Bool? { get }
  19. var number: NSNumber? { get }
  20. }
  21.  
  22. extension JSON : NodeAccessable {
  23. func child(_ index: Int) -> NodeAccessable {
  24. return self[index]
  25. }
  26.  
  27. func child(_ key: String) -> NodeAccessable {
  28.  
  29. return self[key]
  30. }
  31. }
  32.  
  33. extension XMLIndexer : NodeAccessable {
  34. func child(_ index: Int) -> NodeAccessable {
  35. return self[index]
  36. }
  37.  
  38. func child(_ key: String) -> NodeAccessable {
  39. return self[key]
  40. }
  41.  
  42. var string: String? {
  43. if let text = self.element?.text {
  44. return text
  45. }
  46. return nil
  47. }
  48.  
  49. var bool: Bool? {
  50. if let text = self.element?.text {
  51. return NSString(string: text).boolValue
  52. }
  53. return nil
  54. }
  55.  
  56. var number: NSNumber? {
  57. if let text = self.element?.text {
  58. if let n = Int(text) {
  59. return NSNumber(value: n)
  60. }
  61.  
  62. if let n = Float(text) {
  63. return NSNumber(value: n)
  64. }
  65.  
  66. if let n = Double(text) {
  67. return NSNumber(value: n)
  68. }
  69. }
  70.  
  71. return nil
  72. }
  73. }
  74.  
  75. protocol Deserializable {
  76. init?()
  77. mutating func deserialize(_ node: NodeAccessable)
  78. }
  79.  
  80. struct Deserializer {
  81. static func parse<T: Deserializable>(_ node: NodeAccessable) -> T? {
  82. var t = T()
  83. t?.deserialize(node)
  84. return t
  85. }
  86. }
  87.  
  88. struct User: Deserializable {
  89. var username: String?
  90. var password: String?
  91.  
  92. mutating func deserialize(_ node: NodeAccessable) {
  93. self.username = node.child("username").string
  94. self.password = node.child("password").string
  95. }
  96. }
  97.  
  98. /**
  99. Example:
  100.  
  101. //json
  102. let user: User = Deserializer.parse(json)
  103. //or xml
  104. let user: User = Deserializer.parse(xml)
  105.  
  106. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement