Swift使用编解码库Codable的过程详解
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
Codable 是 Swift 引入的全新的编解码库,使开发者更方便的解析JSON 或 plist 文件。支持枚举、结构体和类。
Codable协议定义
Codable代表一个同时符合 Decodable 和 Encodable 协议的类型,即可解码且可编码的类型。
typealias Codable = Decodable & Encodable public protocol Decodable { public init(from decoder: Decoder) throws } public protocol Encodable { public func encode(to encoder: Encoder) throws }
Codable从 Swift 4 开始引入,包含了 Encoder 和 Decoder 协议和他们的两个实现 JSONEncoder、JSONDecoder 和 PropertyListEncoder、PropertyListDecoder。
其中 Codable 及其相关协议放在了标准库中,而具体的 Encoder、Decoder 类放在了 Foundation 框架中。
JSON 和 模型的相互转换
苹果提供了 JSONEncoder
和 JSONDecoder
这两个结构体来方便得在 JSON 数据和自定义模型之间互相转换。苹果可以利用一些系统私有的机制来实现转换,而不需要通过 OC Runtime
。
只要让自己的数据类型符合 Codable 协议,就可以用系统提供的编解码器进行编解码。
struct User: Codable { var name: String var age: Int }
解码(JSON Data -> Model):
let user = JSONDecoder().decode(User.self, from: jsonData)
编码(Model -> JSON Data):
let jsonData = JSONEncoder().encode(user)
字典 和 模型的相互转换
将模型用JSONEncoder的encode转成Data,然后再用JSONSerialization反序列化成Dictionary对象。
struct User: Codable { var name: String? var age: Int? static func convertFromDict(dict: NSDictionary) -> User? { var user: User? do { let data = try JSONSerialization.data(withJSONObject: dict, options: []) let decoder = JSONDecoder() user = try decoder.decode(User.self, from: data) } catch { print(error) } return user } func convertToDict() -> NSDictionary? { var dict: NSDictionary? do { let encoder = JSONEncoder() let data = try encoder.encode(self) dict = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSDictionary } catch { print(error) } return dict } }
到此这篇关于Swift使用编解码库Codable的文章就介绍到这了,更多相关Swift编解码库Codable内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!
相关文章
在Swift中使用Objective-C编写类、继承Objective-C类
这篇文章主要介绍了在Swift中使用Objective-C编写类、继承Objective-C类等操作方法介绍,需要的朋友可以参考下2014-07-07Swift高阶函数contains?allSatisfy?reversed?lexicographicallyPr
这篇文章主要为大家介绍了Swift高阶函数contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-06-06iOS Swift UICollectionView横向分页滚动,cell左右排版问题详解
UICollectionView是iOS中比较常见的一个控件,这篇文章主要给大家介绍了关于iOS Swift UICollectionView横向分页滚动,cell左右排版问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随小编来一起学习学习吧。2017-12-12
最新评论