设为首页 加入收藏

TOP

窥探Swift之数组与字典(一)
2017-10-10 12:17:46 】 浏览:4406
Tags:窥探 Swift 字典

说到数组和字典,只要是编过程的小伙伴并不陌生。在Swift中的数组与字典也有着一些让人眼前一亮的特性,今天的博客就来窥探一下Swift中的Array和Dictionary。还是沿袭之前的风格,在介绍Swift中的数组时,我们会对比一下ObjC中的数组和字典,因为ObjC也是iOS开发的主要语言不是。无论是简单还是复杂的程序,数组和字典的用处还是比较多的,这两者虽然是Swift的基础内容,但是也不失其重要性。关于Objc的集合类请参考之前的博客Objective-C中的集合类

一、Swift中的数组(Array)

数组在其他编程语言中都是存在的,数组就是一组数的集合。虽然其他编程语言中都有数组,但是不同语言中的数组都有着一些属于自己的特性。Swift也不例外,Swift中的数组使用起来还是比较人性化的.

1.数组的声明与创建

在聊Swift中的Array声明创建之前,我想聊一下ObjC中数组的声明与创建,下方是ObjC中不可变数组和可变数组的创建方式。在ObjC中可以使用NSArray来声明不可变数组,使用NSMutableArray来声明可变数组。

1     NSArray *objcArray01 = [NSArray array];
2     NSArray *objcArray02 = @[@(1), @(2)];
3     
4     NSMutableArray *mutableArray = [NSMutableArray array];

而在Swift语言中,你可以使用关键字let来声明不可变数组,使用var来声明可变数组,下方代码声明的是Swift中的可变数组的几种方式。有一点需要注意的是ObjC中的数组只允许往里面存储对象,而不允许往里存储基本数据类型(Int, Float等)。而在Swift中是允许把基本数据类型存入数组中的,如下方代码段所示。下方给出了数组的三种定义的方式。后两种给数组元素制定了数据类型,表示该数组中只能够存储Int类型的值,如果你往里存入了其他的值,对不起,编译器会报错的。

在Swift的数组中,如果在声明数组时没有指定数组中元素的数据类型,那么数组中是可以存放不同数据类型的数据的。如果你指定了数组中只允许存储一种数据类型,如果你再往里存储其他数据类型的话,那就是你的不对了,编译器回给你指出你的错误。具体如下所示:

 

2.数组的操作

(1)可变与不可变数组

如果你想对数组中的元素进行增加、修改或者删除,那么你需要把Array定义成可变数组。如果你把数组定义成了不可变数组,但是你又对他进行了操作,那就是你的不对了。无论是ObjC还是Swift都不允许对不可变数组这位高冷的“御姐”动手动脚,不然会抛出一个错误的。但是可变数组就不一样了,你可以对可变数组进行增删改查操作。

下图是在ObjC中对NSArray操作后的结果,你不能对NSArray中的元素进行修改,也就是说你对NSArray的操作权限只有读的权限,没有写的权限。如果你想对数组进行读写的权限的话,那你就有必要使用可变数组NSMutableArray了。使用NSMutableArray就不会报错,因为你对它有读写的权限。

在Swift中的可变数组和不可变数组归根结底还是变量和常量也就是var和let关键字的使用了。你对变量持有读写的权限,对常量持有读的权限。下方的小实例,本质还是对let和var的讨论,下方是Swift实例:

  

(2) 插入元素

上面Swift实例中已经展示了如何往数组中插入元素。Swift中往数组中插入元素和OC中使用的方法是一样的,只是调用方法的方式不同。下方代码就是往可变数组arrayTest中的索引1的位置插入一个值“Objc”。语法比较简单就不做过多的赘述了。

1 arrayTest.insert("Objc", atIndex: 1);

 

(3) 元素以及数组的追加

你可以使用append函数来往数组的尾部追加值。如果你想把另一个数组追加到一个数组的后方,你可以使用+=运算符来操作。使用+=可以连接数组,这也是Swift中令人兴奋的一个特点。具体操作请看下方的实例:

 

(4)移除元素

上面是添加,接下来要搞一下移除元素。其实Swift中数组移除的方法名和用法和Objective-C中移除可变数组中的元素的方式极为相似。下方截图中是经常使用的移除方法,用法都没有什么难理解的地方,在此就简单的聊上一嘴。

Void removeAll(): 移除数组中全部元素,有一个可选参数,keepCapacity。如果keepCapacity = YES的话,那么数组移除元素后,其存储空间还是存在的,在此往里存储值,不需再给他分配存储空间了。如果keepCapacity=NO的话,那么数组的存储空间就会被回收掉。

    String removeAtIndex(): 移除指定索引的元素,并且返回被移除的元素。

    String removeFrist(): 移除第一个元素,并返回被移除的元素。

    Void removeFirst(n: Int): 这个函数的意思是移除数组前方的几个元素,如果n = 1, 的话就移除前面一个元素这时与String removeFirst()函数功能相同。如果n = 3, 就移除前3个元素。

    String removeLast(): 移除数组中最后一个元素。

Void removeRange(subRange: Range<Int>): 这个函数就比较全能呢,它可以移除数组中有效范围内的连续元素。它需要一个Range参数,下方是这个函数的使用方法,Range的起始位置是1,结束位置是2,就是移除索引1到2之间的元素。可以看Playground中的提示。 Range(start:1, end:2) 代表着半开区间1..<2。

 

3. 使用Array构造函数给数组赋初始值

在一些应用场景中我们需要为数组中的每一项进行初始化,也就是给数组的每一项赋上初始值。举个栗子~,比如我们要使用一个数组来记录公司每个季度的销售额,在数组初始化时,我们给给数组初始化4个初始值为零的元素。接下来就使用Array构造函数来做一些事情。下方就是在数组创建时给数组赋初始值。

 

二、Swift中的字典(Dictionary)

Swift中字典和Objective-C中的字典除了语法不一样外,用法也是大同小异的。字典中存放的就是Key和Value也就是键值对。可以通过Key来取出Value的值,在PHP这门强大的语言中,Array和Dictionary就是一个东西。其实数组就是一种特殊的字典,数组的key就是其下标,只不过这个下标不需要你去指定,由系统分配好,并且是元素在数组中是按下标从小到大排列的。在字典中的键值对是没有固定顺序的。

1. 字典的创建

在Swift中字典的创建和数组的创建也是类似的,就是比数组的item多了一个key。下方创建了两个字典,第一个字典是指定了key与value的数据类型,第二个字典没有为键值指定固定的数据类型。从Playground中我们容易的看出字典中的数据是没有固定数据的,因为读取字典中的值是通过key-value的形式而不是通过下标的方式

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇open source Swift, Objective-C .. 下一篇窥探Swift编程之强大的Switch

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目