Swift 基于Codable协议使用
Codable协议 继承自 Decodable & Encodable
//
// Test1.swift
// TestDemo
//
// Created by admin on 2024/7/9.
//
import Foundationstruct Player{var name:Stringvar highScore:Int = 0var history:[Int] = []var address:Address?var birthday:Date?init(name: String) {self.name = name}}extension Player{mutating func updateScore(_ newScore:Int){history.append(newScore)if(highScore < newScore){highScore = newScore}}
}
//Codable 继承自 Decodable & Encodable
/*
Codable 是 Swift 中用于简化对象序列化和反序列化的协议组合。它由 Encodable 和 Decodable 组成,分别用于将对象编码为外部表示(如 JSON)和从外部表示解码对象。通过实现 Codable,我们可以轻松地将自定义类型与 JSON 等格式进行转换。
*/
extension Player:Codable{/*如果 JSON 中的键与结构体中的属性名称不一致,可以使用 CodingKeys 枚举来定义自定义的键映射*/enum CodingKeys:String,CodingKey{case namecase highScorecase addresscase birthdaycase history = "history1"}
}
/*
Codable 同样适用于嵌套类型
*/
struct Address:Codable{var street:Stringvar citty:Stringvar zipCode:String
}
func test111(){var player = Player(name: "John")player.address = Address(street: "宝田一路", citty: "深圳", zipCode: "2212")player.birthday = Date(timeIntervalSince1970: 25 * 365 * 24 * 60 * 60)player.updateScore(121)player.updateScore(134)/*默认情况下,JSONEncoder 和 JSONDecoder 对日期的处理方式可能不符合需求,可以自定义日期格式*/let formatter = DateFormatter()formatter.dateFormat = "yyyy-MM-dd"let encoder = JSONEncoder()encoder.dateEncodingStrategy = .formatted(formatter)let jsonData = try? encoder.encode(player)guard let jsonData = jsonData else{print("json data is nil")return}let jsonStr = String(data: jsonData, encoding: .utf8)guard let jsonStr = jsonStr else{print("json 数据编码失败")return}print("player 转json 字符串 : " + jsonStr)let decoder = JSONDecoder()decoder.dateDecodingStrategy = .formatted(formatter)guard let jsonDataDe = jsonStr.data(using: .utf8) else {print("json DataDe is null")return}//解码异常处理和打印var user :Player?do {user = try decoder.decode(Player.self, from: jsonDataDe)} catch let DecodingError.dataCorrupted(context) {print(context)} catch let DecodingError.keyNotFound(key, context) {print("Key '\(key)' not found:", context.debugDescription)print("codingPath:", context.codingPath)} catch let DecodingError.valueNotFound(value, context) {print("Value '\(value)' not found:", context.debugDescription)print("codingPath:", context.codingPath)} catch let DecodingError.typeMismatch(type, context) {print("Type '\(type)' mismatch:", context.debugDescription)print("codingPath:", context.codingPath)} catch {print("Error: ", error)}guard let user = user else{print("user is null")return}print("name:" + user.name + ",score:" + "\(user.highScore)")}
相关文章:
Swift 基于Codable协议使用
Codable协议 继承自 Decodable & Encodable // // Test1.swift // TestDemo // // Created by admin on 2024/7/9. // import Foundationstruct Player{var name:Stringvar highScore:Int 0var history:[Int] []var address:Address?var birthday:Date?init(name: St…...
conda激活的虚拟环境的python版本不对应
这个大坑,要看看虚拟环境下envs下有没有bin文件夹 python -Vecho $PATH镜像源的问题,参考...

深度学习概览
引言 深度学习的定义与背景 深度学习是机器学习的一个子领域,涉及使用多层神经网络分析和学习复杂的数据模式。深度学习的基础可以追溯到20世纪80年代,但真正的发展和广泛应用是在21世纪初。计算能力的提升和大数据的可用性使得深度学习在许多领域取得…...

什么是白盒测试中的静态测试?其包含哪些过程和方法?
文章目录 前言一、文档审查二、软件静态分析1.编码规范检查2.软件质量度量 三、代码审查与代码走查1.代码审查2.代码走查 总结 前言 软件白盒测试中的静态测试是指不运行被测软件,仅通过分析或检查等手段达到检测的目的。在软件白盒测试中,静态测试常通…...
搭建一个高并发的Web商品推荐系统,如何涉及软件架构?
搭建一个高并发的Web商品推荐系统,如何涉及软件架构 在搭建一个高并发的Web商品推荐系统时: 微服务架构: 为了支持高并发,我们可以采用微服务架构,将系统拆分成小型、独立的服务,每个服务专注于特定的功…...
今日科技圈最新时事新闻(2024年7月12日
一、智能硬件与电子产品 小米Redmi G Pro 2024游戏本新版本发布 发布时间:7月12日上午10点产品亮点: 搭载英特尔酷睿i7-14650HX处理器,拥有16个核心和24个线程,性能释放高达130W。配备140W满血释放的RTX 4060显卡,提…...

jenkins系列-09.jpom构建java docker harbor
本地先启动jpom server agent: /Users/jelex/Documents/work/jpom-2.10.40/server-2.10.40-release/bin jelexjelexxudeMacBook-Pro bin % sh Server.sh start/Users/jelex/Documents/work/jpom-2.10.40/agent-2.10.40-release/bin jelexjelexxudeMacBook-Pro bin % ./Agent.…...

构造+贪心,CF 432E,Square Tiling
一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 432E - Codeforces 二、解题报告 1、思路分析 很简单的一个构造题 考虑字典序从左到右从上到下,所以我们正常遍历 对于当前格子如果空闲,那么找到一个能填的最小字符 然…...

【Linux】任务管理
这个任务管理(job control)是用在bash环境下的,也就是说:【当我们登录系统获取bashshell之后,在单一终端下同时执行多个任务的操作管理】。 举例来说,我们在登录bash后,可以一边复制文件、一边查…...
计算机网络——常见问题汇总
1. introduction 1.1 Explain what a communication protocol is and why its important. A communication protocol is a set of rules and conventions(公约) that govern(统治) how data is transmitted and received between devices(设备), systems, or entities in a ne…...

Linux的世界 -- 初次接触和一些常见的基本指令
一、Linux的介绍和准备 1、简单介绍下Linux的发展史 1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组(comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另一个UNIX的…...
[AI 大模型] Meta LLaMA-2
文章目录 [AI 大模型] Meta LLaMA-2简介模型架构发展新技术和优势示例 [AI 大模型] Meta LLaMA-2 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yYHlT342-1720705768360)(https://i-blog.csdnimg.cn/direct/9ddc783e01bf48c3bc784a584339003f.jpeg…...

Python3.6.6 OpenCV 将视频中人物标记或者打马赛克或加图片并保存为不同格式
1、轻松识别视频人物并做出标记 需安装face_recongnition与dlib,过程有点困难,还请网上查找方法 import face_recognition import cv2 #镜像源 -i https://pypi.mirrors.ustc.edu.cn/simple # 加载视频 video_file E:\\videos\\1.mp4 video_capture …...

Readiris PDF Corporate / Business v23 解锁版安装教程 (PDF管理软件)
前言 Readiris PDF Corporate / Business 是一款高性能的 OCR(光学字符识别)软件,能够帮助用户将纸质文档、PDF 文件或图像文件转换为可编辑和可搜索的电子文本。该软件提供专业级的功能和特性,非常适合企业和商业使用。使用 Rea…...

.NET MAUI开源架构_2.什么是 .NET MAUI?
1.什么是.NET MAUI? .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款…...
认知偏差知识手册
The Connector 每周会选取我从信息流里获取的有价值内容,包括 AI 探索专题、Github 开源库推荐、工具介绍和一些文章书籍等,目标是链接互联网上的优质内容,获得更多的灵感和知识,从而激发彼此的创造力。 AI 探索 主流推理框架在…...
SpringBoot后端代码基本逻辑
数据持久化(Dao---Entity---mapper) 配置(application.yml) server:port: 10086 spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/wiki?useUnicodetrue&characterEnco…...
Python学生信息管理系统的设计与实现
在本篇博客中,我们将深入探讨一个基于Python的简单学生信息管理系统的设计与实现过程。这个系统允许用户执行诸如添加、删除、修改和查询学生信息等操作。我们将逐步解析代码,理解其中的关键概念和编程实践。 1. 系统概述 该系统由几个核心功能组成&am…...
最优雅的PHP框架 Laravel
Laravel 之所以被称为最优雅的 PHP 框架,是因为它在设计和功能上做了很多独特的创新,极大地提高了开发效率和代码的可维护性。以下是 Laravel 受欢迎的主要原因: 良好的文档和社区支持 Laravel 有详尽的官方文档,涵盖了框架的所有功能和用法。此外,Laravel 社区非常活跃…...

log4j2的日志框架(详细,springboot和异步日志的实现)
目录 log4j2的介绍 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的进阶--异步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介绍 Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带 来…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...

Axure Rp 11 安装、汉化、授权
Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...