swift4.1 编解码

简介: /*本节来学习swift的编码、解码和串行化。为什么需要编解码?许多的编程任务涉及到通过网络发送数据、将数据保存到磁盘上,或是将数据提交到API以及服务上。

/*
本节来学习swift的编码、解码和串行化。

为什么需要编解码?
许多的编程任务涉及到通过网络发送数据、将数据保存到磁盘上,或是将数据提交到API以及
服务上。这些任务往往需要将数据进行编码到一个中间格式然后在进行传输,或是在传输结束后将中间格式转换回
原始数据,然后在进行处理。这就需要提供一种能方便对数据进行编码、解码的机制了。

原始数据---编码---提交传输----解码----原始数据

swift 提供了标准化的方法对数据进行编码和解码。
编码: Encodable协议
解码: Decodable协议
如果自定义类型要同时遵循Encodable与Decodable协议,就可以直接用 Codable 协议。

Apple的Foundation库提供了两种编码器类,分别是 JSONEncoder / JSONDecoder,
PropertyListEncoder / PropertyListDecoder

JSONEncoder / JSONDecoder: 对象实例与json数据格式之间进行转换;
PropertyListEncoder / PropertyListDecoder: 对象实例与XML数据格式之间进行互相转换。
*/

do {

struct MyObject: Codable {
    var a = 10
    var str = "Hello"
    var array = [1, 2, 3]
}

let obj = MyObject()
// 将obj转为JSON字符串
let encoder = JSONEncoder()
// 注意,JSONEncoder的encoder方法返回的是一个Data类型的对象
let jsonData = try? encoder.encode(obj)

if let jsonData = jsonData,
    let jsonStr = String(data: jsonData, encoding: .utf8) {
    print("Json string is : \(jsonStr)")
}

// 以下是将一个json data转为MyObject对象
let decoder = JSONDecoder()
let newObj = try? decoder.decode(MyObject.self, from: jsonData!)
if let obj = newObj {
    print("a = \(obj.a)")
    print("str = \(obj.str)")
    print("array = \(obj.array)")
}

}

// 将自定义类型转为XML
do {

struct MyObject: Codable {
    var a = 10
    var str = "Hello"
    var array = [1, 2, 3]
}

let obj = MyObject()
let encoder = PropertyListEncoder()
encoder.outputFormat = .xml
let xmlData = try? encoder.encode(obj)
if let xmlData = xmlData,
    let xmlStr = String.init(data: xmlData, encoding: .utf8) {
    print("Xml string is: \(xmlStr)")
}

// 将XML Data转为MyObject对象
let decoder = PropertyListDecoder()
let newObj = try? decoder.decode(MyObject.self, from: xmlData!)
if let obj = newObj {
    print("a = \(obj.a)")
    print("str = \(obj.str)")
    print("array = \(obj.array)")
}

}

目录
相关文章
|
1月前
|
人工智能 开发者
阿里云百炼开通、免费7000万Tokens领取及免费额度查看全流程
阿里云百炼是一站式大模型开发平台,集成通义千问等主流模型,提供模型调用、应用构建与定制服务。新用户可自动获千万级免费Tokens(每模型100万),额度详情可在控制台“免费额度”页查看。阿里云百炼官网:https://t.aliyun.com/U/fPVHqY
|
6月前
|
人工智能 前端开发 Serverless
基于阿里云Qwen3构建AI聊天助手(新手图文教程)
阿里云正式开源Qwen3系列大模型,含2款MoE与6款Dense模型(0.6B–235B),支持119种语言、思考/非思考双模式。依托函数计算FC,提供vLLM/SGLang等部署方案,新手可快速体验AI聊天助手。首月Coding Plan低至7.9元。
1280 20
|
7月前
|
人工智能 自然语言处理 搜索推荐
大模型微调应用:解锁垂直场景的无限可能
大语言模型微调,是让通用AI精准适配垂直场景的关键技术:低成本、高效率、保通用、可定制。本文详解其在智能客服、内容创作、专业问答、代码生成等领域的落地实践与核心要点,助力企业将AI转化为真实生产力。(239字)
|
8月前
|
NoSQL Java Redis
千锤百炼,稳如磐石:阿里云Tair无感切换技术保障业务持续在线
Tair基于15年技术沉淀,创新实现主从无感切换,通过内核、SDK与网络协同优化,大幅降低实例切换时的不可用时间至1秒内,提升业务连续性体验。
674 1
|
8月前
|
XML Java 数据库连接
【RuoYi-Eggjs】:告别手写,自动生成代码
【RuoYi-Eggjs】是一款面向 Egg.js 项目的自动化代码生成工具,通过解析 MyBatis 风格的 XML Mapper 文件,智能生成标准化的 Service 层代码,彻底告别重复手写。支持实时监听、多数据库映射与内网穿透,提升开发效率与规范性。
389 7
|
10月前
|
人工智能 搜索推荐 定位技术
Geo优化“两大核心+四轮驱动”方法执行的标准化SOP深度解读
在AI重塑搜索的今天,Geo专家于磊首创“两大核心+四轮驱动”优化法,倡导人性化、真实可信的内容生态。融合E-E-A-T原则与权威数据引用,构建品牌权威,提升AI引用率与获客效率,助力企业实现可持续增长。
522 8
|
11月前
|
人工智能 自然语言处理 Python
当AI开始写故事:AIGC重塑内容产业,创作的“边界”还剩什么?
当AI开始写故事:AIGC重塑内容产业,创作的“边界”还剩什么?
458 7
|
9月前
|
人工智能 JSON 自然语言处理
短难误判率仅2%,新一代网关路由SHG,在P95不升前提下完胜RouteLLM。
在和 RouteLLM 的两档式对比中 RouteLLM 将约百分之 69.3 的短难请求路由至轻量模型,而本文提出的网关系统将短难请求中落入轻档的比例压缩到约 2.4%,整体 P95 几乎不变。实验表明,短难请求构成了一类独立且在实践中高度相关的 LLM 路由稳健性问题,而针对性的、常数级开销的守护机制可以在不增加整体成本和尾部延迟的前提下,大幅缓解这一问题。
|
11月前
|
存储 运维 安全
毅硕HPC | HPC环境下的LDAP配置
在HPC环境下,LDAP是构建统一、可扩展、易维护的用户身份管理体系的基石。它将分散在各处的用户信息整合到一个逻辑中心,使得庞大的集群在用户管理上像一个单一的、连贯的系统一样工作。
732 0

热门文章

最新文章