在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
集合的定义Swift中提供了两种数据结构用于存放数据的集合,各自是数组(Array)和字典(Dictionary)。 他们的主要差别在于数组中的元素由下标确定。而字典中的数据的值由数据的键(Key)决定。下面我们觉得集合就是数组或字典。 集合的可变性我们能够定义一个集合常量或者集合变量。 一旦定义为常量,就意味着集合的长度、内容和顺序都不能再改动了。比方,定义为常量的数组,不能再向当中加入新的元素。 数组的创建由于swift中变量的创建遵循“ var 变量名:变量类型 ”的语法。因此数组的创建归根结底还是数组类型的定义。 一共同拥有三种方法来定义数组的类型:
第一种是数组类型的完整定义,即Array关键字加上一对尖括号,括号内写上数组元素的类型。 另外一种是数组类型的简化定义,即一对方括号内写上数组元素的类型。这与第一种定义方法全然等价。 在使用这两种方法定义数组的时候。一定要确保数组中每一个元素类型同样,否则将会产生编译错误。 第三种运用了Swift的类型推导的特性。须要注意的是。数组的值由方括号组成,里面的元素用逗号隔开。假设方括号改成了圆括号。编译器不会报错(这将变成元组),所以千万要小心,避免莫名其妙的错误。 第三种方法除了书写简单之外,另一种优点,即不必确保数组中每一个元素类型同样。我们来通过代码看一看多个不同类型的元素出如今统一数组中会发生什么情况:
能够得到例如以下结果
因此不难发现,arrayMixed数组之所以能够加入多个类型的元素,是由于它被推导为Array< NSObject>类型。同样的,所以一旦数组的类型确定。就不能再插入不属于这个类型的的值。 在我阅读的教材上,作者特别提出。不指定类型的数组不能使用Array的append方法。 可是经过我的測试。并没有这种限制。有兴趣的读者能够自行測试,欢迎指正。 数组的訪问与改动数组长度能够使用数组的仅仅读属性count来获取数组长度:
推断数组为空能够使用数组的仅仅读属性isEmpty来推断数组是否为空。当然通过推断count是否为0也能够达到同样的效果,只是代码略长一些。
加入新元素一共同拥有两种方法能够在数组的尾部加入新元素:
不管使用哪种方法,都必须保证新加入的元素和数组类型同样。 比方试图像arrayThree中加入元素’1.5’会导致编译错误。 因此,另外一种方法具有一个强大的功能,即向数组尾部加入多个元素。 另一种通用的方法,即调用数组的insert(atIndex:)方法。在指定位置插入新元素。
删除数组元素能够调用数组的removeAtIndex()和removeLast()方法。
这两个方法会返回被删除的元素的值,当然假设不须要知道,能够无视它的返回值,直接调用方法就可以。 须要注意的一点是,removeAtIndex方法首先要推断下标是否越界。也就是说它会用到数组的长度。这意味着须要线性遍历数组。因此假设仅仅须要移除数组的最后一个元素且数组长度非常大时。应该使用removeLast()方法。 訪问数组元素了解了怎样加入和删除元素。我们就要想办法把新加入的元素取出来看看了。通过数组下标能够訪问指定位置的数组元素,语法与C语言同样。
改动数组元素下标不仅能够訪问数组元素。还能够实现数组元素的改动。 这和訪问数组元素是非常相似的,仅仅要交换等号两边变量的位置就可以。
不仅如此,还能够通过数组下标批量改动元素:
此时,等号的右側必须是数组的字面量,而不能是一个数组变量。 也就是说这种写法是错误的:
原因是左边的arrayThree[0…1]事实上是一个SubArray,在Swift中它的类型叫做ArraySlice。即Int类型的数组切片,而右边是一个Array类型变量,依据Swift类型安全的特性,这种操作自然是被禁止的。 假设左边的切片长度和右边的变量长度不一致会发生什么情况呢?不用过于操心,这不会产生不论什么错误。Swift会机智的帮我们解决问题。
输出结果各自是:
因此。假设变量长度超过切片长度,将会自己主动在切片位置后加入元素(如同arrayOne),相当于调用了数组的insert(atIndex:)方法若干次。同样地,假设变量长度少于切片长度,没有值的位置的元素自己主动被移除,后面的元素自己主动向前补上。相当于调用了数组的removeAtIndex()方法若干次。 尽管这样不会出现不论什么错误,只是出于逻辑严谨性考虑,应该避免等号两端变量长度不一样的情况。 数组遍历之前我们介绍了数组的增删改操作,还缺少一个查找。 也就是数组的遍历。 在Swift中,除了像C语言那样定义一个下标变量,在for循环中遍历数组,还有两种方式遍历数组。
通过观察输出结果能够发现。for in循环是依照从前向后的顺序遍历数组的。
enumerate(array)方法的返回值是一个数组。数组中的每一个元素都是一个二元元组。第一个值是下标index。第二个值是元素的值。这个方案也是顺序遍历数组。 数组的初始化在本章的开头。我们利用数组字面量来初始化一个数组。事实上,数组还有其它的初始化方法。 首先类比字符串的构造方法var string = String(),我们能够得知数组的另外两种构造方法。
执行结果:
除此以外,数组另一种特殊的构造方法,能够指定数组长度,在这种情况下还必须强制指定数组中每一个元素的值。 假设觉得无用的话。能够先设置为0,然后再改动。
得益于类型推导,第五种数组初始化方法也是合法的。 可是之前的标准初始化方法不能够这么简化。输出结果例如以下:
附录查看完整专栏——《Swift轻松入门》【Swift入门(一)——基本的语法】 |
请发表评论