From 32d606a94f438767a2d7b64359a3a2ad7bb306db Mon Sep 17 00:00:00 2001 From: Jason Allum Date: Tue, 17 Nov 2015 15:41:03 -0500 Subject: [PATCH] Updated readTag to handle map types. --- .../ProtocGenSwift/JSONReader.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/swift/lib/ProtocGenSwift/ProtocGenSwift/JSONReader.swift b/swift/lib/ProtocGenSwift/ProtocGenSwift/JSONReader.swift index 58f4cf4..bba8e37 100644 --- a/swift/lib/ProtocGenSwift/ProtocGenSwift/JSONReader.swift +++ b/swift/lib/ProtocGenSwift/ProtocGenSwift/JSONReader.swift @@ -1,7 +1,7 @@ import Foundation public class JSONReader : Reader { - typealias RepeatedObject = (key: Int, generator: NSArray.Generator) + typealias RepeatedObject = (key: Int, generator: AnyGenerator) var generatorStack: [NSDictionary.Generator] = [] var generator: NSDictionary.Generator @@ -34,7 +34,19 @@ public class JSONReader : Reader { while let (key, value) = generator.next() { if let (tag, repeated) = tagMap[key as! String] { if repeated { - repeatedObject = (key: tag, generator: (value as! NSArray).generate()) + if let array = value as? [AnyObject] { + var generator = array.generate() + repeatedObject = (key: tag, generator: anyGenerator { generator.next() }) + } else if let dict = value as? [String: AnyObject] { + var generator = dict.generate() + repeatedObject = (key: tag, generator: anyGenerator { + if let (key, value) = generator.next() { + return ["key": key, "value": value] + } else { + return nil + } + }) + } object = repeatedObject?.generator.next() } else { object = value @@ -143,4 +155,4 @@ public class JSONReader : Reader { repeatedObject = repeatedObjectStack.removeLast() } } -} \ No newline at end of file +}