@@ -268,6 +268,157 @@ public func <-- (inout array: [NSDate], value: AnyObject?) -> [NSDate] {
268268 return array
269269}
270270
271+
272+ // MARK: Primitive Map Deserialization
273+
274+ public func <-- ( inout map: [ String : String ] ? , value: AnyObject ? ) -> [ String : String ] ? {
275+ if let stringMap = convertToNilIfNull ( value) as? [ String : String ] {
276+ map = stringMap
277+ } else {
278+ map = nil
279+ }
280+ return map
281+ }
282+
283+ public func <-- ( inout map: [ String : String ] , value: AnyObject ? ) -> [ String : String ] {
284+ var newValue : [ String : String ] ?
285+ newValue <-- value
286+ if let newValue = newValue { map = newValue }
287+ return map
288+ }
289+
290+ public func <-- ( inout map: [ String : Int ] ? , value: AnyObject ? ) -> [ String : Int ] ? {
291+ if let intMap = convertToNilIfNull ( value) as? [ String : Int ] {
292+ map = intMap
293+ } else {
294+ map = nil
295+ }
296+ return map
297+ }
298+
299+ public func <-- ( inout map: [ String : Int ] , value: AnyObject ? ) -> [ String : Int ] {
300+ var newValue : [ String : Int ] ?
301+ newValue <-- value
302+ if let newValue = newValue { map = newValue }
303+ return map
304+ }
305+
306+ public func <-- ( inout map: [ String : Float ] ? , value: AnyObject ? ) -> [ String : Float ] ? {
307+ if let floatMap = convertToNilIfNull ( value) as? [ String : Float ] {
308+ map = floatMap
309+ } else {
310+ map = nil
311+ }
312+ return map
313+ }
314+
315+ public func <-- ( inout map: [ String : Float ] , value: AnyObject ? ) -> [ String : Float ] {
316+ var newValue : [ String : Float ] ?
317+ newValue <-- value
318+ if let newValue = newValue { map = newValue }
319+ return map
320+ }
321+
322+ public func <-- ( inout map: [ String : Double ] ? , value: AnyObject ? ) -> [ String : Double ] ? {
323+ if let doubleMapDoubleExcitement = convertToNilIfNull ( value) as? [ String : Double ] {
324+ map = doubleMapDoubleExcitement
325+ } else {
326+ map = nil
327+ }
328+ return map
329+ }
330+
331+ public func <-- ( inout map: [ String : Double ] , value: AnyObject ? ) -> [ String : Double ] {
332+ var newValue : [ String : Double ] ?
333+ newValue <-- value
334+ if let newValue = newValue { map = newValue }
335+ return map
336+ }
337+
338+ public func <-- ( inout map: [ String : Bool ] ? , value: AnyObject ? ) -> [ String : Bool ] ? {
339+ if let boolMap = convertToNilIfNull ( value) as? [ String : Bool ] {
340+ map = boolMap
341+ } else {
342+ map = nil
343+ }
344+ return map
345+ }
346+
347+ public func <-- ( inout map: [ String : Bool ] , value: AnyObject ? ) -> [ String : Bool ] {
348+ var newValue : [ String : Bool ] ?
349+ newValue <-- value
350+ if let newValue = newValue { map = newValue }
351+ return map
352+ }
353+
354+ public func <-- ( inout map: [ String : NSURL ] ? , value: AnyObject ? ) -> [ String : NSURL ] ? {
355+ if let stringURLMap = convertToNilIfNull ( value) as? [ String : String ] {
356+ map = [ String: NSURL] ( )
357+ for (key, stringURL) in stringURLMap {
358+ if let url = NSURL ( string: stringURL) {
359+ map![ key] = url
360+ }
361+ }
362+ } else {
363+ map = nil
364+ }
365+ return map
366+ }
367+
368+ public func <-- ( inout map: [ String : NSURL ] , value: AnyObject ? ) -> [ String : NSURL ] {
369+ var newValue : [ String : NSURL ] ?
370+ newValue <-- value
371+ if let newValue = newValue { map = newValue }
372+ return map
373+ }
374+
375+ public func <-- ( inout map: [ String : NSDate ] ? , valueAndFormat: ( AnyObject ? , AnyObject ? ) ) -> [ String : NSDate ] ? {
376+ var newValue : [ String : NSDate ] ?
377+ if let dateStringMap = convertToNilIfNull ( valueAndFormat. 0 ) as? [ String : String ] {
378+ if let formatString = convertToNilIfNull ( valueAndFormat. 1 ) as? String {
379+ let dateFormatter = NSDateFormatter ( )
380+ dateFormatter. dateFormat = formatString
381+ newValue = [ String: NSDate] ( )
382+ for (key, dateString) in dateStringMap {
383+ if let date = dateFormatter. dateFromString ( dateString) {
384+ newValue![ key] = date
385+ }
386+ }
387+ }
388+ }
389+ map = newValue
390+ return map
391+ }
392+
393+ public func <-- ( inout map: [ String : NSDate ] , valueAndFormat: ( AnyObject ? , AnyObject ? ) ) -> [ String : NSDate ] {
394+ var newValue : [ String : NSDate ] ?
395+ newValue <-- valueAndFormat
396+ if let newValue = newValue { map = newValue }
397+ return map
398+ }
399+
400+ public func <-- ( inout map: [ String : NSDate ] ? , value: AnyObject ? ) -> [ String : NSDate ] ? {
401+ if let timestamps = convertToNilIfNull ( value) as? [ String : AnyObject ] {
402+ map = [ String: NSDate] ( )
403+ for (key, timestamp) in timestamps {
404+ var date : NSDate ?
405+ date <-- timestamp
406+ if date != nil { map![ key] = date! }
407+ }
408+ } else {
409+ map = nil
410+ }
411+ return map
412+ }
413+
414+ public func <-- ( inout map: [ String : NSDate ] , value: AnyObject ? ) -> [ String : NSDate ] {
415+ var newValue : [ String : NSDate ] ?
416+ newValue <-- value
417+ if let newValue = newValue { map = newValue }
418+ return map
419+ }
420+
421+
271422// MARK: Custom Object Deserialization
272423
273424public protocol Deserializable {
@@ -311,6 +462,27 @@ public func <-- <T: Deserializable>(inout array: [T], dataObject: AnyObject?) ->
311462 return array
312463}
313464
465+ // MARK: Custom Object Map Deserialization
466+
467+ public func <-- < T: Deserializable > ( inout map: [ String : T ] ? , dataObject: AnyObject ? ) -> [ String : T ] ? {
468+ if let dataMap = convertToNilIfNull ( dataObject) as? [ String : JSONDictionary ] {
469+ map = [ String: T] ( )
470+ for (key, data) in dataMap {
471+ map![ key] = T ( data: data)
472+ }
473+ } else {
474+ map = nil
475+ }
476+ return map
477+ }
478+
479+ public func <-- < T: Deserializable > ( inout map: [ String : T ] , dataObject: AnyObject ? ) -> [ String : T ] {
480+ var newMap : [ String : T ] ?
481+ newMap <-- dataObject
482+ if let newMap = newMap { map = newMap }
483+ return map
484+ }
485+
314486// MARK: Raw Value Representable (Enum) Deserialization
315487
316488public func <-- < T: RawRepresentable > ( inout property: T ? , value: AnyObject ? ) -> T ? {
@@ -356,4 +528,12 @@ public func <-- <T: Deserializable>(inout array: [T], dataString: String) -> [T]
356528 return array <-- dataStringToObject ( dataString)
357529}
358530
531+ public func <-- < T: Deserializable > ( inout map: [ String : T ] ? , dataString: String ) -> [ String : T ] ? {
532+ return map <-- dataStringToObject ( dataString)
533+ }
534+
535+ public func <-- < T: Deserializable > ( inout map: [ String : T ] , dataString: String ) -> [ String : T ] {
536+ return map <-- dataStringToObject ( dataString)
537+ }
538+
359539
0 commit comments