Created
December 1, 2016 05:04
-
-
Save mosluce/f1657607bbf13d0ab7c27784189f94b6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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 { | |
static func deserialize(input: NodeAccessable) -> Self | |
} | |
struct User: Deserializable { | |
var username: String? | |
var password: String? | |
static func deserialize(input: NodeAccessable) -> User { | |
var user = User() | |
user.username = input.child(key: "username").string | |
user.password = input.child(key: "password").string | |
return user | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment