一个轻量级的Swift库,能够通过反射自动从JSON创建模型。
iOS 8.0, Swift 3.1
下载并添加源文件到您的项目
如果您使用框架
import DarkModel
您的所有模型类必须继承自Model
// JSON:
{
"name": "Dark",
"age": 24,
"hobbies": ["Metal", "Game"],
"homePage": "http://odetodark.com"
"lover": {
"name": "Yu",
"age": 16,
"birthday": 827251200
"hobbies": ["Shopping", "Eating", "Dancing"]
}
}
// Model:
class PersonModel: Model {
var name = ""
var age = 0
var homePage: URL!
var birthday: Date?
var hobbies = [String]()
var lover: PersonModel?
}
let person = PersonModel(json: json)
let json = person.json()
// JSON:
{
"user_name": "Dark",
"age": 24,
}
// Model:
class PersonModel: Model {
override class var propertyToJSONKeyMapper: [String: String] {
return ["name": "user_name"]
}
var name = ""
var age = 0
}
// JSON:
{
"name": "Dark",
"age": 24,
"friends": [
{
"name": "Ricky",
"age": 18,
},
{
"name": "Linda",
"age": 25,
}
],
"moments": [
827251200,
1218124800,
]
}
// Model:
class PersonModel: Model {
override class var propertyToCollectionElementTypeMapper: [String: AnyClass] {
return ["friends": PersonModel.self, "moments": NSDate.self]
}
var name = ""
var age = 0
var friends = [PersonModel]()
var moments = [Date]()
}
// JSON:
{
"user_name": "Dark",
"age": 24,
}
// Model:
class PersonModel: Model {
var name = ""
var age: Int?
required init(json: Any?) {
super.init(json: json)
if let dic = json as? [String: Any] {
age = dic[jsonKey("age")] as? Int
}
}
override func json() -> [String : Any] {
var dic = super.json()
if let value = age {
dic[jsonKey("age")] = value
}
return dic
}
}
// JSON:
{
"birthday": "1996-03-20"
}
// Model:
class PersonModel: Model {
var birthday: Date!
override func objectFromJSON(_ json: Any?, for property: String) -> Any? {
switch property {
case "birthday":
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
if let string = json as? String {
return formatter.date(from: string)
} else {
return nil
}
default:
return nil
}
}
override func jsonFromObject(_ object: Any, for property: String) -> Any? {
switch property {
case "birthday":
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: object as! Date)
default:
return nil
}
}
}
DarkModel是在MIT许可证下发布的。有关详细信息,请参阅LICENSE。
一个轻量级的JSON转模型库, Swift实现。
iOS 8.0, Swift 3.1
下载并添加源文件到您的项目
如果使用框架的话
import DarkModel
所有类 必须 继承自Model
// JSON:
{
"name": "Dark",
"age": 24,
"hobbies": ["Metal", "Game"],
"homePage": "http://odetodark.com"
"lover": {
"name": "Yu",
"age": 16,
"birthday": 827251200
"hobbies": ["Shopping", "Eating", "Dancing"]
}
}
// Model:
class PersonModel: Model {
var name = ""
var age = 0
var homePage: URL!
var birthday: Date?
var hobbies = [String]()
var lover: PersonModel?
}
let person = PersonModel(json: json)
let json = person.json()
// JSON:
{
"user_name": "Dark",
"age": 24,
}
// Model:
class PersonModel: Model {
override class var propertyToJSONKeyMapper: [String: String] {
return ["name": "user_name"]
}
var name = ""
var age = 0
}
// JSON:
{
"name": "Dark",
"age": 24,
"friends": [
{
"name": "Ricky",
"age": 18,
},
{
"name": "Linda",
"age": 25,
}
],
"moments": [
827251200,
1218124800,
]
}
// Model:
class PersonModel: Model {
override class var propertyToCollectionElementTypeMapper: [String: AnyClass] {
return ["friends": PersonModel.self, "moments": NSDate.self]
}
var name = ""
var age = 0
var friends = [PersonModel]()
var moments = [Date]()
}
// JSON:
{
"user_name": "Dark",
"age": 24,
}
// Model:
class PersonModel: Model {
var name = ""
var age: Int?
required init(json: Any?) {
super.init(json: json)
if let dic = json as? [String: Any] {
age = dic[jsonKey("age")] as? Int
}
}
override func json() -> [String : Any] {
var dic = super.json()
if let value = age {
dic[jsonKey("age")] = value
}
return dic
}
}
// JSON:
{
"birthday": "1996-03-20"
}
// Model:
class PersonModel: Model {
var birthday: Date!
override func objectFromJSON(_ json: Any?, for property: String) -> Any? {
switch property {
case "birthday":
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
if let string = json as? String {
return formatter.date(from: string)
} else {
return nil
}
default:
return nil
}
}
override func jsonFromObject(_ object: Any, for property: String) -> Any? {
switch property {
case "birthday":
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: object as! Date)
default:
return nil
}
}
}
DarkModel 使用 MIT 许可证。 详见See LICENSE。