Skip to content

Instantly share code, notes, and snippets.

@mosluce
Created December 1, 2016 05:04
Show Gist options
  • Save mosluce/f1657607bbf13d0ab7c27784189f94b6 to your computer and use it in GitHub Desktop.
Save mosluce/f1657607bbf13d0ab7c27784189f94b6 to your computer and use it in GitHub Desktop.
//
// 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