Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // Deserializable.swift
- // MapperDemo
- //
- // Created by 默司 on 2016/12/1.
- // Copyright © 2016年 默司. All rights reserved.
- //
- import Foundation
- import SwiftyJSON
- import SWXMLHash
- protocol NodeAccessable {
- func child(_ index: Int) -> NodeAccessable
- func child(_ key: String) -> NodeAccessable
- var string: String? { get }
- var bool: Bool? { get }
- var number: NSNumber? { get }
- }
- extension JSON : NodeAccessable {
- func child(_ index: Int) -> NodeAccessable {
- return self[index]
- }
- func child(_ key: String) -> NodeAccessable {
- return self[key]
- }
- }
- extension XMLIndexer : NodeAccessable {
- func child(_ index: Int) -> NodeAccessable {
- return self[index]
- }
- func child(_ key: String) -> NodeAccessable {
- return self[key]
- }
- var string: String? {
- if let text = self.element?.text {
- return text
- }
- return nil
- }
- var bool: Bool? {
- if let text = self.element?.text {
- return NSString(string: text).boolValue
- }
- return nil
- }
- var number: NSNumber? {
- if let text = self.element?.text {
- if let n = Int(text) {
- return NSNumber(value: n)
- }
- if let n = Float(text) {
- return NSNumber(value: n)
- }
- if let n = Double(text) {
- return NSNumber(value: n)
- }
- }
- return nil
- }
- }
- protocol Deserializable {
- init?()
- mutating func deserialize(_ node: NodeAccessable)
- }
- struct Deserializer {
- static func parse<T: Deserializable>(_ node: NodeAccessable) -> T? {
- var t = T()
- t?.deserialize(node)
- return t
- }
- }
- struct User: Deserializable {
- var username: String?
- var password: String?
- mutating func deserialize(_ node: NodeAccessable) {
- self.username = node.child("username").string
- self.password = node.child("password").string
- }
- }
- /**
- Example:
- //json
- let user: User = Deserializer.parse(json)
- //or xml
- let user: User = Deserializer.parse(xml)
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement