Blame view

Pods/HandyJSON/Source/BuiltInBridgeType.swift 1.9 KB
75d24c15   yangbin   123
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  //
  //  BuiltInBridgeType.swift
  //  HandyJSON
  //
  //  Created by zhouzhuo on 15/07/2017.
  //  Copyright © 2017 aliyun. All rights reserved.
  //
  
  import Foundation
  
  protocol _BuiltInBridgeType: _Transformable {
  
      static func _transform(from object: Any) -> _BuiltInBridgeType?
      func _plainValue() -> Any?
  }
  
  extension NSString: _BuiltInBridgeType {
  
      static func _transform(from object: Any) -> _BuiltInBridgeType? {
          if let str = String.transform(from: object) {
              return NSString(string: str)
          }
          return nil
      }
  
      func _plainValue() -> Any? {
          return self
      }
  }
  
  extension NSNumber: _BuiltInBridgeType {
  
      static func _transform(from object: Any) -> _BuiltInBridgeType? {
          switch object {
          case let num as NSNumber:
              return num
          case let str as NSString:
              let lowercase = str.lowercased
              if lowercase == "true" {
                  return NSNumber(booleanLiteral: true)
              } else if lowercase == "false" {
                  return NSNumber(booleanLiteral: false)
              } else {
                  // normal number
                  let formatter = NumberFormatter()
                  formatter.numberStyle = .decimal
                  return formatter.number(from: str as String)
              }
          default:
              return nil
          }
      }
  
      func _plainValue() -> Any? {
          return self
      }
  }
  
  extension NSArray: _BuiltInBridgeType {
      
      static func _transform(from object: Any) -> _BuiltInBridgeType? {
          return object as? NSArray
      }
  
      func _plainValue() -> Any? {
          return (self as? Array<Any>)?.plainValue()
      }
  }
  
  extension NSDictionary: _BuiltInBridgeType {
      
      static func _transform(from object: Any) -> _BuiltInBridgeType? {
          return object as? NSDictionary
      }
  
      func _plainValue() -> Any? {
          return (self as? Dictionary<String, Any>)?.plainValue()
      }
  }