TTReflect
Swift版本JSON转Model框架
适配 Swift 4+ (iOS 8+)
-
切换到
master
分支,手动将Reflect.swift
文件拖拽到您的项目中 -
CocoaPods
pod 'TTReflect', '~> 4.0.0'
适配 Xcode8 & Swift3 (iOS 8+)
-
切换到
swift3
分支,手动将Reflect.swift
文件拖拽到您的项目中 -
CocoaPods (版本1.1.1或更高)
pod 'TTReflect', '~> 3.0.0'
适配 Swift2.3 (iOS 8+)
-
切换到
swift2.3
分支,手动拖拽Reflect.swift
文件到你的项目中 -
Cocoapods
pod 'TTReflect', '2.1.0'
安装
iOS 7
手动导入
将Reflect.swift
拖到项目中即可使用
iOS 8+
使用CocoaPods安装
platform :ios, '8.0'
use_frameworks!
pod 'TTReflect', '~> 3.0'
使用前需要导入框架
import TTReflect
=======
使用
推荐模型样式
class Tag: NSObject {
var count: Int = 0
var name: String = ""
var title: String = ""
var isOpen: Bool = false
}
推荐所有的属性都使用默认值,能够避免在原始数据错误时,过多的可选判断或空对象崩溃
1.模型需要继承于NSObject
2.Int等基本属性需要设置默认值
3.对象属性可以使用可选类型
各类模型定义方式,详见 测试模型
关键方法
// e.g. 模型为Tag类
// convert json to object
let tag = Reflect<Tag>.mapObject(json: json)
// convert data to object
let tag = Reflect<Tag>.mapObject(data: data)
// convert json to object array
let tags = Reflect<Tag>.mapObjects(json: json)
// convert data to object array
let tags = Reflect<Tag>.mapObjects(data: data)
实例
具体请见代码示例
字典转模型
指定需要转换的json或data,并指定转换的模型类型
let book = Reflect<Book>.mapObject(json: json)
let book = Reflect<Book>.mapObject(data: data)
字典数组转模型数组
指定需要转换的json或data,并指定转换的模型数组内的元素类型
let casts = Reflect<Cast>.mapObjects(json: json)
let casts = Reflect<Cast>.mapObjects(data: data)
=======
补充方法
补充方法均遵循于协议,支持代码提示
1.需要替换的属性名
希望将json的title
属性映射到模型的tt
属性
func setupMappingReplaceProperty() -> [String : String] {
return ["tt": "title"]
}
2.模型内嵌套子类模型
需要指定子类模型的键以及子类的类名
func setupMappingObjectClass() -> [String : AnyClass] {
return ["images": Images.self]
}
3.模型内嵌套子类模型数组
需要指定子类模型数组的键以及子类的类名
func setupMappingElementClass() -> [String : AnyClass] {
return ["tags": Tag.self]
}
4.需要忽略属性
指定需要忽略的属性名
func setupMappingIgnorePropertyNames() -> [String] {
return ["tags"]
}
完整模型演示
class TTNull: NSObject {
}
class Book: NSObject {
var tt: String = ""
var pubdate: String = ""
var image: String = ""
var binding: String = ""
var pages = 0
var alt: String = ""
var id: String = ""
var publisher: String = ""
var summary: String = ""
var price: String = ""
var secretly: Bool = false
var imgs = Images()
var tags = [Tag]()
var test_null = TTNull()
func setupMappingReplaceProperty() -> [String : String] {
return ["tt": "title", "imgs": "images"]
}
func setupMappingObjectClass() -> [String : AnyClass] {
return ["images": Images.self, "test_null": TTNull.self]
}
func setupMappingElementClass() -> [String : AnyClass] {
return ["tags": Tag.self]
}
}
完整转换效果
=======
帮助
1.如果在使用过程中遇到bug,或是有期待的功能,请留下Issues联系我,我将尽快答复
2.如果希望能够完善这个框架,敬请提交pull request
E-mail: [email protected]