Swift入坑系列—集合类型
- 数组(Arrays)
- 字典(Dictionaries)
数组(Arrays)
在OC里面,NSArray和NSMutableArray这两个类可以存储任意类型的对象,并且不提供所返回对象的任何特别信息。
在Swift中,数据值被存入某个数组之前类型必须明确。方法是通过显式的类型标注或者类型推断,而且不是必须是class
类型。
//定义了一个存储 字符串类型 的可变数组('var'字段修饰)
var shoppingList: [String] = ["Eggs", "Milk"] //定义了一个存储 字符串类型 的不可变数组('let'字段修饰) let peopleList: [String] = ["Danny", "Mike", "Johnnie"]
Note:
当然你也可以省略类型标注,因为Swift可以根据你的内容推断出正确的类型,如下面的代码。
var shoppingList = ["Eggs", "Milk"]
创建并构造数组
//创建一个整型空数组
var array1 = [Int]()//创建一个特定大小,并且所有数据都为默认的整型数组
var array2 = [Int](count: 3, repeatedValue:1)//创建一个特定大小,并且数据类型为默认的推断为浮点型的数组
var array3 = [](count: 3, repeatedValue:2.5)
数组的增删改查
增(插入数据)
Swift中往数组里面插入数据有多种方式:
1)append()
方法shoppingList.append("Flour")
2)
insert(atIndex:)
方法shoppingList.insert("Maple Syrup", atIndex: 0)
3)
+=
赋值运算符shoppingList += ["Baking Powder"]
删(删除数据)
通过
removeAtIndex()
方法移除指定位置的数据项。这个方法把数组在特定索引值中存储的数据项移除并且返回这个被移除的数据项(返回的数据项如果不用的时候可以无视):let mapleSyrup = shoppingList.removeAtIndex(0)
通过
removeLast()
方法可以移除最后一项数据项let apples = shoppingList.removeLast()
改(更新数据)
//通过指定某一项更新数据项 shoppingList[0] = "Six eggs"//通过区间更新区间内数据项 shoppingList[4...6] = ["Bananas", "Apples"]
Note:
我们不能使用下标语法在数组尾部添加新项。如果我们试着用这种方法对索引越界的数据进行检索或者设置新值的操作,我们会引发一个运行期错误。我们可以使用索引值和数组的count属性进行比较来在使用某个索引之前先检验是否有效。除了当count
等于 0 时(说明这是个空数组),最大索引值一直是count - 1
,因为数组都是零起索引查(访问数据)
//获取第0项数据并赋值给变量firstItem var firstItem = shoppingList[0]//获取某个区间的数据项并赋值给另外一个数值 let tempArr = shoppingList[1...2]
数组的遍历
通过for-in
循环遍历数组中的数据项:
【方式一】
let array = ["Danny", "Johnnie", "Mike"]
//遍历数组数据项
for item in array { print(item) }
控制台打印:
Danny
Johnnie
Mike
【方式二】
let array = ["Danny", "Johnnie", "Mike"]
//遍历数组数据项 for (idx, value) in array.enumerate() { print("idx:\(idx) value:\(value)") }
控制台打印:
idx:0 value:Danny idx:1 value:Johnnie idx:2 value:Mike
字典(Dictionaries)
创建字典字面量
OC里面,字典字面量的格式是:@{@"key" : @"value"}
,而Swift里面,字典字面量以及数组字面量均使用中括号[]
包住。格式为:[key 1: value 1, key 2: value 2, key 3: value 3]
//创建一个
var airports: [String:String] = ["TYO": "Tokyo", "DUB": "Dublin"]
//创建一个键为String,值为Int的空字典
var dic1 = Dictionary<String, Int>()
字典的增删改查
增(插入数据)
在字典中使用下标语法来添加新的数据项。可以使用一个合适类型的 key 作为下标索引,并且分配新的合适类型的值:airports["LHR"] = "London"
删(删除数据)
通过
removeValueForKey()
方法在字典中移除键值对。这个方法在键值对存在的情况下会移除该键值对并且返回被移除的value或者在没有值的情况下返回nil
://通过键值“DUB”移除对应的值 let removedValue = airports.removeValueForKey("DUB")
改(更新数据)
通过使用下标语法来改变特定键对应的值://使用下标语法来改变特定键对应的值 airports["LHR"] = "London Heathrow"
也可以通过
updateValue(forKey:)
方法设置或者更新特定键对应的值。这个方法还会返回更新值之前的原值或者nil
,方便我们检查更新是否成功://通过“DUB”键将旧值更新为“Dublin Internation” let oldValue = airports.updateValue("Dublin Internation", forKey: "DUB")
查(访问数据)
使用下标语法来在字典中检索特定键对应的值。由于使用一个没有值的键这种情况是有可能发生的,可选类型返回这个键存在的相关值,否则就返回nil
:if let airportName = airports["DUB"] {print("DUB键对应的值为: \(airportName).") } else { print("DUB键没有对应的值") }
控制台打印: DUB键对应的值为: Dublin Internation.
字典的遍历
【方式一】
通过for-in
循环遍历某个字典中的键值对。每一个字典中的数据项都由(key, value)元组形式返回,并且我们可以使用临时常量或者变量来分解这些元组:
//遍历字典对应的键值对
for (key, value) in airports {print("\(key): \(value)") }
控制台打印:
TYO: Tokyo
LHR: London Heathrow
【方式二】
我们也可以通过访问它的keys
或者values
属性检索一个字典所有的键、值:
//遍历字典所有键
for key in airports.keys {print("该字典的键:\(key)") } //遍历字典所有值 for value in airports.values { print("该字典的值:\(value)") }
控制台打印:
该字典的键:LHR
该字典的键:TYO
该字典的值:London Heathrow
该字典的值:Tokyo
Note:
当你想要将字典的键、值分别存起来的话,可以使用数组的APIArray()
进行存储
//将字典的所有键存进keys数组中
let keys = Array(airports.keys)//将字典的所有值存进values数组中 let values = Array(airports.values)
转载于:https://www.cnblogs.com/Free-Thinker/p/6294153.html
Swift入坑系列—集合类型相关推荐
- Swift语法专题五——集合类型
Swift讲解专题五--集合类型 一.引言 Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增 ...
- 华大芯片入坑系列-1
华大芯片入坑系列-1 运行环境 创建模板-不带库 创建模板-带驱动库ddl 开发板:EV-HC32F460-LQFP100-050-V1.3 IDE: keil5 资源地址: 官网. 运行环境 华大芯 ...
- swift int转string_Swift集合类型协议浅析(下)
关注[搜狐技术产品]公众号,第一时间获取技术干货 导读 本篇是Swift集合类型协议浅析系列文章的下篇,在这篇文章中,我们将继续围绕集合类型协议展开讨论,侧重点更多地关注于String相关的周边协议. ...
- UVM入坑系列笔记(一)
最近本人在做毕业设计,需要用到UVM搭建验证平台,故在网上查找相关资料,看了一些博客和科普,多少有些收获,记录在这里,以便以后复习查看.以下是本人根据网上学习资料整理的笔记,如果有什么不对的地方欢迎指 ...
- gulp入坑系列(1)——安装gulp
前言 好吧,我承认我是为了搞定Sass编译CSS文件的问题,迷一样的着手入gulp的坑,sass和gulp的爬坑历程大概会一起更新.然后感觉这里windows和mac的流程差不多,不过mac的通常 ...
- C++入坑系列(五)之函数指针
前言 简而言之,函数指针就是函数的地址.我们可以与数组进行类比,数组的数组名就是数组的首地址,而函数的地址就是函数名. 获取函数的地址 在实际使用中,我们可以直接通过访问函数名的方式便可以获得函数的地 ...
- VUE 入坑系列 一 双向绑定
html代码 <div id="app"><p>{{message}}</p><span>message1</span> ...
- 随身wifi免入坑系列
生活本就艰难,想做个兼职还需要被各种套路,先交钱给你货说的是拿货之后教你怎么卖货,不还是呆着你身边的人可劲薅羊毛.最后东西烂到自己手里,钱都是给人家赚了. 据统计,2021年国内手机网民已超过11亿户 ...
- Swift中文教程(四) 集合类型
Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集合.字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合. 在Swift中,数组和字典的键和值都必须明确它的类 ...
- 向量数据库入坑:使用 Docker 和 Milvus 快速构建本地轻量图片搜索引擎
本篇文章,我来分享如何使用 Docker 来搭建一个能够跑在本地的轻量图片搜索引擎,实现日常生活中我们习以为常,但是实现起来颇为麻烦的功能:以图搜图. 写在前面 之前网上看到一个问题<如何在自己 ...
最新文章
- Android - 广播机制和Service
- 欣赏一下OFFICE 2013 PLUS吧
- python生词本的生词_【Anki小工具】有道生词本转Anki 1.0
- python 正则使用笔记
- 取一定范围内随机小数 c_算伪随机概率中C值的快捷方法
- linux之登录式shell和非登录式shell
- AR:Unity与iOS交互(入门篇)
- opencv-contrib-Python编译module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘
- Java中计算包含汉字字符串长度的方法
- caj格式的文档怎么转成pdf格式呢?
- meta禁用浏览器缓存
- 千兆网线水晶头的接法
- 产品生命周期用户生命周期?
- 一种简单的生成伪随机数的方法
- qq邮件如何设置html阅读,如何得知对方是否已阅读QQ邮件?
- 杂项:MIME(多用途互联网邮件扩展类型)百科
- 浪潮之巅第十三章 — 高科技公司的摇篮:斯坦福大学
- 理解CNI和CNI插件
- oppo手机便签存储路径在哪
- (静态,动态,文件)三个版本的通讯录