@@ -46,6 +46,8 @@ Or you can login Xcode with your GitHub account. just search **KakaJSON**.
4646 - [ JSONData] ( #jsondata )
4747 - [ Nested Model 1] ( #nested-model-1 )
4848 - [ Nested Model 2] ( #nested-model-2 )
49+ - [ Recursive] ( #recursive )
50+ - [ Generic] ( #generic )
4951 - [ Model Array] ( #model-array )
5052 - [ Convert] ( #convert )
5153 - [ Listen] ( #listen )
@@ -342,7 +344,9 @@ let student = json.kj.model(Student.self)
342344### let
343345``` swift
344346struct Cat : Convertible {
345- let weight: Double = 0.0
347+ // let of integer type is very restricted in release mode
348+ // please user `private(set) var` instead of `let`
349+ private (set ) var weight: Double = 0.0
346350 let name: String = " "
347351}
348352let json = ...
@@ -458,6 +462,76 @@ XCTAssert(book?.name == "Fast C++")
458462XCTAssert (book? .price == 666.6 )
459463```
460464
465+ ### Recursive
466+ ``` swift
467+ class Person : Convertible {
468+ var name: String = " "
469+ var parent: Person?
470+ required init () {}
471+ }
472+
473+ let json: [String : Any ] = [
474+ " name" : " Jack" ,
475+ " parent" : [" name" : " Jim" ]
476+ ]
477+
478+ let person = json.kj .model (Person.self )
479+ XCTAssert (person? .name == " Jack" )
480+ XCTAssert (person? .parent ? .name == " Jim" )
481+ ```
482+
483+ ### Generic
484+ ``` swift
485+ struct NetResponse <Element >: Convertible {
486+ let data: Element ? = nil
487+ let msg: String = " "
488+ let code: Int = 0
489+ }
490+
491+ struct User : Convertible {
492+ let id: String = " "
493+ let nickName: String = " "
494+ }
495+
496+ struct Goods : Convertible {
497+ private (set ) var price: CGFloat = 0.0
498+ let name: String = " "
499+ }
500+
501+ let json1 = """
502+ {
503+ "data": {"nickName": "KaKa", "id": 213234234},
504+ "msg": "Success",
505+ "code" : 200
506+ }
507+ """
508+ let response1 = json1.kj .model (NetResponse< User> .self )
509+ let user = response1? .data
510+ XCTAssert (user? .nickName == " KaKa" )
511+ XCTAssert (user? .id == " 213234234" )
512+
513+ let json2 = """
514+ {
515+ "data": [
516+ {"price": "6199", "name": "iPhone XR"},
517+ {"price": "8199", "name": "iPhone XS"},
518+ {"price": "9099", "name": "iPhone Max"}
519+ ],
520+ "msg": "Success",
521+ "code" : 200
522+ }
523+ """
524+ let response2 = json2.kj .model (NetResponse< [Goods]> .self )
525+ let goods = response2? .data
526+ XCTAssert (goods? .count == 3 )
527+ XCTAssert (goods? [0 ].price == 6199 )
528+ XCTAssert (goods? [0 ].name == " iPhone XR" )
529+ XCTAssert (goods? [1 ].price == 8199 )
530+ XCTAssert (goods? [1 ].name == " iPhone XS" )
531+ XCTAssert (goods? [2 ].price == 9099 )
532+ XCTAssert (goods? [2 ].name == " iPhone Max" )
533+ ```
534+
461535### Model Array
462536``` swift
463537struct Car : Convertible {
0 commit comments