@@ -35,7 +35,7 @@ public struct JSON {
3535 }
3636
3737 public init ( data: NSData ? ) {
38- if let data = data, let object: AnyObject = NSJSONSerialization . JSONObjectWithData ( data, options: . AllowFragments, error : nil ) {
38+ if let data = data, let object: AnyObject = try ? NSJSONSerialization . JSONObjectWithData ( data, options: . AllowFragments) {
3939 self . init ( object)
4040 }
4141 else {
@@ -69,17 +69,21 @@ public struct JSON {
6969 return JSON ( )
7070 }
7171 }
72+
73+ public var isNil : Bool {
74+ return ( object == nil )
75+ }
7276}
7377
74- // MARK: - Printable
78+ // MARK: - CustomStringConvertible
7579
76- extension JSON : Printable {
80+ extension JSON : CustomStringConvertible {
7781 public var description : String {
7882 if let object: AnyObject = object {
7983 switch object {
8084 case is String , is NSNumber , is Float , is Double , is Int , is UInt , is Bool : return " \( object) "
8185 case is [ AnyObject ] , is [ String : AnyObject ] :
82- if let data = NSJSONSerialization . dataWithJSONObject ( object, options: . PrettyPrinted, error : nil ) {
86+ if let data = try ? NSJSONSerialization . dataWithJSONObject ( object, options: . PrettyPrinted) {
8387 return NSString ( data: data, encoding: NSUTF8StringEncoding) as? String ?? " "
8488 }
8589 default : return " "
@@ -90,9 +94,9 @@ extension JSON: Printable {
9094 }
9195}
9296
93- // MARK: - DebugPrintable
97+ // MARK: - CustomDebugStringConvertible
9498
95- extension JSON : DebugPrintable {
99+ extension JSON : CustomDebugStringConvertible {
96100 public var debugDescription : String {
97101 return description
98102 }
@@ -265,7 +269,7 @@ extension JSON {
265269extension JSON {
266270 public var dictionary : [ String : JSON ] ? {
267271 if let dictionary = object as? [ String : AnyObject ] {
268- return Dictionary ( map ( dictionary) { ( $0, JSON ( $1) ) } )
272+ return Dictionary ( dictionary. map { ( $0, JSON ( $1) ) } )
269273 }
270274 return nil
271275 }
@@ -286,27 +290,29 @@ extension Dictionary {
286290extension JSON : Equatable { }
287291
288292public func == ( lhs: JSON , rhs: JSON ) -> Bool {
289- if let lhsObject: AnyObject = lhs. object, rhsObject: AnyObject = rhs. object {
290- switch ( lhsObject, rhsObject) {
291- case ( let left as String , let right as String ) :
292- return left == right
293- case ( let left as Double , let right as Double ) :
294- return left == right
295- case ( let left as Float , let right as Float ) :
296- return left == right
297- case ( let left as Int , let right as Int ) :
298- return left == right
299- case ( let left as UInt , let right as UInt ) :
300- return left == right
301- case ( let left as Bool , let right as Bool ) :
302- return left == right
303- case ( let left as [ AnyObject ] , let right as [ AnyObject ] ) :
304- return left. map { JSON ( $0) } == right. map { JSON ( $0) }
305- case ( let left as [ String : AnyObject ] , let right as [ String : AnyObject ] ) :
306- return Dictionary ( map ( left) { ( $0, JSON ( $1) ) } ) == Dictionary ( map ( right) { ( $0, JSON ( $1) ) } )
307- default : return false
308- }
293+ guard let lhsObject: AnyObject = lhs. object, rhsObject: AnyObject = rhs. object else { return false }
294+
295+ switch ( lhsObject, rhsObject) {
296+ case ( let left as String , let right as String ) :
297+ return left == right
298+ case ( let left as Double , let right as Double ) :
299+ return left == right
300+ case ( let left as Float , let right as Float ) :
301+ return left == right
302+ case ( let left as Int , let right as Int ) :
303+ return left == right
304+ case ( let left as UInt , let right as UInt ) :
305+ return left == right
306+ case ( let left as Bool , let right as Bool ) :
307+ return left == right
308+ case ( let left as NSURL , let right as NSURL ) :
309+ return left == right
310+ case ( let left as NSNumber , let right as NSNumber ) :
311+ return left == right
312+ case ( let left as [ AnyObject ] , let right as [ AnyObject ] ) :
313+ return left. map { JSON ( $0) } == right. map { JSON ( $0) }
314+ case ( let left as [ String : AnyObject ] , let right as [ String : AnyObject ] ) :
315+ return Dictionary ( left. map { ( $0, JSON ( $1) ) } ) == Dictionary ( right. map { ( $0, JSON ( $1) ) } )
316+ default : return false
309317 }
310-
311- return false
312318}
0 commit comments