Skip to content

Commit 6eeee41

Browse files
committed
Update README.md
1 parent cb6270b commit 6eeee41

File tree

1 file changed

+110
-9
lines changed

1 file changed

+110
-9
lines changed

README.md

Lines changed: 110 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ Or you can login Xcode with your GitHub account. just search **KakaJSON**.
7575
- [Set](#set)
7676
- [Dictionary](#dictionary)
7777
- [JSON To Model_03_Key Mapping](#json-to-model_03_key-mapping)
78-
- [Basic Usage](#basic-usage-1)
78+
- [Basic Usage](#basic-usage)
7979
- [Camel -> Underline](#camel---underline)
8080
- [Underline -> Camel](#underline---camel)
8181
- [Inheritance](#inheritance-1)
@@ -1749,11 +1749,11 @@ struct Car: Convertible {
17491749

17501750
/*
17511751
If there are many settings of modelKey, the rule is (e.g. Student)
1752-
use Student's kj_modelKey firstly
1753-
if dosen't exist, use ConvertibleConfig of Student
1754-
if ①② dosen't exist, use ConvertibleConfig of Student's superclass
1755-
if ①②③ dosen't exist, use ConvertibleConfig of Student's superclass's superclass...
1756-
if ①②③④ dosen't exist, use gloabal ConvertibleConfig
1752+
1. use Student's kj_modelKey firstly
1753+
2. if 1 dosen't exist, use ConvertibleConfig of Student
1754+
3. if 1\2 dosen't exist, use ConvertibleConfig of Student's superclass
1755+
4. if 1\2\3 dosen't exist, use ConvertibleConfig of Student's superclass's superclass...
1756+
5. if 1\2\3\4 dosen't exist, use gloabal ConvertibleConfig
17571757
*/
17581758

17591759
// Person, Student, Car all have kj_modelKey, so use kj_modelKey firstly
@@ -1796,9 +1796,10 @@ struct Dog: Convertible {
17961796
// name -> data[1]["dog"]["name"]
17971797
case "name": return "data.1.dog.name"
17981798
// try every mapping of array orderly until success
1799-
// ① nickName -> nick_name
1800-
// ② nickName -> dog["nickName"]
1801-
// ③ nickName -> dog["nick_name"]
1799+
// 1. nickName -> nickName
1800+
// 2. nickName -> nick_name
1801+
// 3. nickName -> dog["nickName"]
1802+
// 4. nickName -> dog["nick_name"]
18021803
case "nickName": return ["nickName", "nick_name", "dog.nickName", "dog.nick_name"]
18031804
default: return property.name
18041805
}
@@ -1831,6 +1832,57 @@ XCTAssert(dog.age == age)
18311832
XCTAssert(dog.nickName == nickName1)
18321833
XCTAssert(dog.toy?.name == toy.name)
18331834
XCTAssert(dog.toy?.price == toy.price)
1835+
1836+
1837+
/*-------------------------------------------------*/
1838+
1839+
struct Team: Convertible {
1840+
var name: String?
1841+
var captainName: String?
1842+
1843+
func kj_modelKey(from property: Property) -> ModelPropertyKey {
1844+
switch property.name {
1845+
case "captainName": return "captain.name"
1846+
default: return property.name
1847+
}
1848+
}
1849+
}
1850+
1851+
let teamName = "V"
1852+
let captainName = "Quentin"
1853+
1854+
let json: [String: Any] = [
1855+
"name": teamName,
1856+
"captain.name": captainName,
1857+
]
1858+
let team = json.kj.model(Team.self)
1859+
XCTAssert(team.name == teamName)
1860+
XCTAssert(team.captainName == captainName)
1861+
1862+
/*-------------------------------------------------*/
1863+
1864+
struct Model: Convertible {
1865+
var valueA: String?
1866+
var valueB: String?
1867+
1868+
func kj_modelKey(from property: Property) -> ModelPropertyKey {
1869+
switch property.name {
1870+
case "valueA": return "a.0.a"
1871+
case "valueB": return "b.0.b.0.b"
1872+
default: return property.name
1873+
}
1874+
}
1875+
}
1876+
1877+
let json: [String: Any] = [
1878+
"a": [ "l", "u", "o" ],
1879+
"b": [
1880+
[ "b": [ "x", "i", "u" ] ]
1881+
]
1882+
]
1883+
let model = json.kj.model(Model.self)
1884+
XCTAssert(model.valueA == "l")
1885+
XCTAssert(model.valueB == "x")
18341886
```
18351887

18361888

@@ -1907,6 +1959,55 @@ XCTAssert(person.name == "Jack")
19071959
let pet = person.pet as? Dog
19081960
XCTAssert(pet?.name == "Wang")
19091961
XCTAssert(pet?.weight == 109.5)
1962+
1963+
/*-------------------------------------------------*/
1964+
1965+
class Book: Convertible {
1966+
var name: String = ""
1967+
var price: Double = 0.0
1968+
required init() {}
1969+
}
1970+
1971+
struct Person: Convertible {
1972+
var name: String = ""
1973+
// [AnyObject]、[Convertible]、NSArray、NSMutableArray
1974+
var books: [Any]?
1975+
1976+
func kj_modelValue(from jsonValue: Any?,
1977+
_ property: Property) -> Any? {
1978+
if property.name != "books" { return jsonValue }
1979+
// if books is `NSMutableArray`, neet convert `Array` to `NSMutableArray`
1980+
// because `Array` to `NSMutableArray` is not a bridging conversion
1981+
return (jsonValue as? [Any])?.kj.modelArray(Book.self)
1982+
}
1983+
}
1984+
1985+
let name = "Jack"
1986+
let books = [
1987+
(name: "Fast C++", price: 666),
1988+
(name: "Data Structure And Algorithm", price: 1666)
1989+
]
1990+
1991+
let json: [String: Any] = [
1992+
"name": name,
1993+
"books": [
1994+
["name": books[0].name, "price": books[0].price],
1995+
["name": books[1].name, "price": books[1].price]
1996+
]
1997+
]
1998+
1999+
let person = json.kj.model(Person.self)
2000+
XCTAssert(person.name == name)
2001+
2002+
XCTAssert(person.books?.count == books.count)
2003+
2004+
let book0 = person.books?[0] as? Book
2005+
XCTAssert(book0?.name == books[0].name)
2006+
XCTAssert(book0?.price == Double(books[0].price))
2007+
2008+
let book1 = person.books?[1] as? Book
2009+
XCTAssert(book1?.name == books[1].name)
2010+
XCTAssert(book1?.price == Double(books[1].price))
19102011
```
19112012

19122013
### Example

0 commit comments

Comments
 (0)