@@ -1909,6 +1909,80 @@ class ReerJSONTests: XCTestCase {
19091909 XCTAssert ( model4. c == [ 1 , 2 , 3 ] )
19101910 }
19111911
1912+ func testBasicTypeArray( ) throws {
1913+ struct Test : Decodable {
1914+ var double : [ Double ]
1915+ var int : [ Int ]
1916+ var string : [ String ]
1917+ }
1918+
1919+ let data = """
1920+ {
1921+ " double " : [1.1, 2.2, 3.3],
1922+ " int " : [1, 2, 3],
1923+ " string " : [ " 1 " , " 2 " , " 3 " ]
1924+ }
1925+ """ . data ( using: . utf8) !
1926+ let model = try ReerJSONDecoder ( ) . decode ( Test . self, from: data)
1927+ XCTAssert ( model. double == [ 1.1 , 2.2 , 3.3 ] )
1928+ XCTAssert ( model. int == [ 1 , 2 , 3 ] )
1929+ XCTAssert ( model. string == [ " 1 " , " 2 " , " 3 " ] )
1930+ }
1931+
1932+ func testBasicTypeArray2( ) throws {
1933+ struct Test : Decodable {
1934+ var double : [ Double ]
1935+ var int : [ Int ]
1936+ var string : [ String ]
1937+
1938+ enum CodingKeys : String , CodingKey {
1939+ case double
1940+ case int
1941+ case string
1942+ }
1943+
1944+ init ( from decoder: any Decoder ) throws {
1945+ let keyed = try decoder. container ( keyedBy: CodingKeys . self)
1946+ var doubleUnkeyed = try keyed. nestedUnkeyedContainer ( forKey: . double)
1947+ var intUnkeyed = try keyed. nestedUnkeyedContainer ( forKey: . int)
1948+ var stringUnkeyed = try keyed. nestedUnkeyedContainer ( forKey: . string)
1949+
1950+ var doubleRet : [ Double ] = [ ]
1951+ while !doubleUnkeyed. isAtEnd {
1952+ let element = try doubleUnkeyed. decode ( Double . self)
1953+ doubleRet. append ( element)
1954+ }
1955+ self . double = doubleRet
1956+
1957+ var intRet : [ Int ] = [ ]
1958+ while !intUnkeyed. isAtEnd {
1959+ let element = try intUnkeyed. decode ( Int . self)
1960+ intRet. append ( element)
1961+ }
1962+ self . int = intRet
1963+
1964+ var stringRet : [ String ] = [ ]
1965+ while !stringUnkeyed. isAtEnd {
1966+ let element = try stringUnkeyed. decode ( String . self)
1967+ stringRet. append ( element)
1968+ }
1969+ self . string = stringRet
1970+ }
1971+ }
1972+
1973+ let data = """
1974+ {
1975+ " double " : [1.1, 2.2, 3.3],
1976+ " int " : [1, 2, 3],
1977+ " string " : [ " 1 " , " 2 " , " 3 " ]
1978+ }
1979+ """ . data ( using: . utf8) !
1980+ let model = try ReerJSONDecoder ( ) . decode ( Test . self, from: data)
1981+ XCTAssert ( model. double == [ 1.1 , 2.2 , 3.3 ] )
1982+ XCTAssert ( model. int == [ 1 , 2 , 3 ] )
1983+ XCTAssert ( model. string == [ " 1 " , " 2 " , " 3 " ] )
1984+ }
1985+
19121986 #if !os(Linux)
19131987 @available ( macOS 12 , iOS 15 , tvOS 15 , watchOS 8 , visionOS 1 , * )
19141988 func testDecodableWithConfiguration( ) throws {
0 commit comments