Swift - Swift4新特性介绍2(下标支持泛型,Codable序列化)

2024-02-15 21:38

本文主要是介绍Swift - Swift4新特性介绍2(下标支持泛型,Codable序列化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://www.hangge.com/blog/cache/detail_1824.html

三、下标支持泛型

1,下标的返回类型支持泛型

有时候我们会写一些数据容器,Swift 支持通过下标来读写容器中的数据。但是如果容器类中的数据类型定义为泛型,过去下标语法就只能返回 Any,在取出值后需要用 as? 来转换类型。现在 Swift4 定义下标也可以使用泛型了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

struct GenericDictionary<KeyHashableValue> {

    private var data: [KeyValue]

     

    init(data: [KeyValue]) {

        self.data = data

    }

     

    subscript<T>(key: Key) -> T? {

        return data[key] asT

    }

}

 

//字典类型: [String: Any]

let earthData = GenericDictionary(data: ["name""Earth""population": 7500000000, "moons": 1])

 

//自动转换类型,不需要在写 "as? String"

let name: String? = earthData["name"]

print(name)

 

//自动转换类型,不需要在写 "as? Int"

let population: Int? = earthData["population"]

print(population)

原文:Swift - Swift4新特性介绍2(下标支持泛型,Codable序列化)

 

2,下标类型同样支持泛型

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

extension GenericDictionary {

    subscript<KeysSequence>(keys: Keys) -> [Valuewhere Keys.Iterator.Element == Key {

        var values: [Value] = []

        for key in keys {

            if let value = data[key] {

                values.append(value)

            }

        }

        return values

    }

}

 

// Array下标

let nameAndMoons = earthData[["moons""name"]]        // [1, "Earth"]

// Set下标

let nameAndMoons2 = earthData[Set(["moons""name"])]  // [1, "Earth"]

 

四、Codable 序列化

如果要将一个对象持久化,需要把这个对象序列化。过去的做法是实现 NSCoding 协议,但实现 NSCoding 协议的代码写起来很繁琐,尤其是当属性非常多的时候。

Swift4 中引入了 Codable 协议,可以大大减轻了我们的工作量。我们只需要让需要序列化的对象符合 Codable 协议即可,不用再写任何其他的代码。

1

2

3

4

struct LanguageCodable {

    var name: String

    var version: Int

}

 

1,Encode 操作

我们可以直接把符合了 Codable 协议的对象 encode 成 JSON 或者 PropertyList。

1

2

3

4

5

6

7

8

let swift = Language(name: "Swift", version: 4)

 

//encoded对象

let encodedData = try JSONEncoder().encode(swift)

 

//从encoded对象获取String

let jsonString = String(data: encodedData, encoding: .utf8)

print(jsonString)

原文:Swift - Swift4新特性介绍2(下标支持泛型,Codable序列化)

 

2,Decode 操作

1

2

let decodedData = try JSONDecoder().decode(Language.self, from: encodedData)

print(decodedData.name, decodedData.version)

原文:Swift - Swift4新特性介绍2(下标支持泛型,Codable序列化)


原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1824.html

这篇关于Swift - Swift4新特性介绍2(下标支持泛型,Codable序列化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712607

相关文章

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Java序列化之serialVersionUID的用法解读

《Java序列化之serialVersionUID的用法解读》Java序列化之serialVersionUID:本文介绍了Java对象的序列化和反序列化过程,强调了serialVersionUID的作... 目录JavChina编程a序列化之serialVersionUID什么是序列化为什么要序列化serialV

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth

java反序列化serialVersionUID不一致问题及解决

《java反序列化serialVersionUID不一致问题及解决》文章主要讨论了在Java中序列化和反序列化过程中遇到的问题,特别是当实体类的`serialVersionUID`发生变化或未设置时,... 目录前言一、序列化、反序列化二、解决方法总结前言serialVersionUID变化后,反序列化失

golang实现nacos获取配置和服务注册-支持集群详解

《golang实现nacos获取配置和服务注册-支持集群详解》文章介绍了如何在Go语言中使用Nacos获取配置和服务注册,支持集群初始化,客户端结构体中的IpAddresses可以配置多个地址,新客户... 目录golang nacos获取配置和服务注册-支持集群初始化客户端可选参数配置new一个客户端 支

Redis的安全机制详细介绍及配置方法

《Redis的安全机制详细介绍及配置方法》本文介绍Redis安全机制的配置方法,包括绑定IP地址、设置密码、保护模式、禁用危险命令、防火墙限制、TLS加密、客户端连接限制、最大内存使用和日志审计等,通... 目录1. 绑定 IP 地址2. 设置密码3. 保护模式4. 禁用危险命令5. 通过防火墙限制访问6.

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.