Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29329
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-20 22:39
文章分类

全部博文(49)

文章存档

2014年(49)

我的朋友

分类: iOS平台

2014-06-27 12:44:55


数组用顺序列表来存储多个相同类型的值。相同的值可以多次出现在数组中的不同位置。

Swift 数组在存储值的时候,一定要指明类型。它们不同于Objective-C的NSArrayNSMutableArray类能够存储任何种类的对象,而且不用提供任何关于它们返回对象性质的相关信息。在Swift中,特定数组能够存储值的类型是明确的,要么通过一个明确的类型注解,要么通过类型推断,并且不必是一个类类型。例如,如果你创建一个Int类型的数组,你不能插入任何Int类型之外的值进那个数组。Swift数组是类型安全的,并且总是明确它们所包含值的类型。

 

数组类型声明的简便语法

数组类型声明的完整写法为Array,这里SomeType是数组允许存储的类型。你也可以用简便写法SomeType[] 来定义数组类型,这两种写法功能是完全相同的,更倾向于简便写法,本书之后章节中都是使用的这种写法。

 

数组值

你可以用数组值来初始化一个数组,数组值是书写一个或多个值构成的数组集合的快捷方式。使用方括号包含一系列的值,中间用逗号隔开,就可以编写一个数组值。

下面的例子创建了一个数组叫做shoppingList 来存储String值:

shoppingList变量被声明为“一个String 类型数组”,写为String[].

因为这个特定数组已经指定类型为String,所以它只能允许存储String值。这里,shoppingList数组用由两个字符串值("Eggs"和"Milk")构成的数组值来初始化的。

注意:shoppingList数组被声明为一个变量(用var)而不是一个常量(用let)因为在下面例子中更多条目会被加到shopping列表中。

在这种例子下,数组值包含两个字符串值,除此之外没有别的东西了。这个符合shoppingList变量声明的类型(只能包含String值的数组),所以用包含两个元素的数组值来给shoppingList初始化的方式是允许的。

收益与Swift的类型推断,如果你使用相同类型值的数组值来初始化数组的话,就不用明确的声明类型了。shoppingList可以使用一种更简便的方式来初始化

因为在数组值中的所有值是相同类型,Swift能够推断出shoppingList变量的类型是String[]

 

访问和修改一个数组

通过访问它的方法和属性,或者=使用下标语法来访问和修改一个数组。

为了获取一个数组中元素的数目,访问它的只读属性count

可以使用isEmpty属性来检查一下count属性是否等于0:

通过调用数组的append方法,可以添加一个新的元素到数组的末端:

此外,可以用加号赋值操作符(+=)添加一个新的条目到数组的末端:

你也可以使用加号赋值符操作符(+=)将类型兼容的数组追到后面去:

通过下标语法可以从数组取出一个值,数组名紧跟着中括号,里面加上下标:

注意在数组中的第一个元素的下标是0而不是1.Swift中的数组总是从0开始的。

你可以使用下标语法来改变某个位置上的值:

你也可以使用下标语法来改变某个范围内的值,即使替换值的长度跟你要替换的长度不一样。下面的例子用"Bananas"和"Apple"替换了"Chocolate Spread","Cheese",和"Butter"

注意:你不能使用下标语法来追加一个新的条目到数组的末端。如果你想要使用下标语法来获取或设置一个超出数组下标范围的值,将会引发一个运行时间错误。然而,通过与数组的count属性进行比较,你可以在使用它之前检查这个索引是否有效,。除了当count是0(代表数组是空的)以外,在数组中最大的有效索引是count-1,因为数组索引是从0开始的。

插入一个元素到数组中指定的位置,可以调用数组的insert(atIndex:)方法:

调用这个insert方法,将插入了一个值为Maple Srup购物列表的最前端,即索引为0的位置:

类似的,使用removeAtIndex方法来移除一个数组中的某个元素。这个方法将指定位置处的元素移除掉并且返回移除的元素(如果你不需要它,你也可以不管返回的值):

当一个元素从数组中移除之后,那个缺口就会关上,所以索引0对应的值再一次等于“Six eggs”:

如果你想要从数组中移除最后的元素,使用removeLast方法而不是removeAtIndex方法,可以避免访问数组的count属性。像removeAtIndex方法一样,removeLast将会返回移除的元素:

遍历一个数组

你可以使用for-in循环遍历一个数组中的所有值:

如果你需要每个元素的索引和它的值,可以使用全局函数enumerate函数来遍历数组。enumerate函数为会根据每个元素生成一个对应的元组(索引,值)。在循环体内,你可以把元组分解成为临时的常量或变量:

更多的关于for-in循环,请看For Loops.

 

创建和初始化一个数组

你可以使用构造器来创建一个某种类型的空数组(不用设置任何初始值):

注意someInts变量的类型被推断为Int[]类型,因为它是用Int[]构造器初始化的。

另外,如果上下文已经提供了类型信息,比如一个函数参数或者是已声明类型的变量或常量,你可以用一个空数组值来创建一个空数组,写为[](一个空的方括号):

Swift的Array类型提供一个构造器创建一个具有某个大小,值都为某个默认值的数组。在这个构造器中,你可以指定要添加到新数组的元素个数(叫做count)和一个适当类型的默认值(叫做repeatedValue):

感谢类型推断,当使用这个构造器的时候,你不需要指定数组的存储类型,因为它可以从初始值推断:

最后,可以使用加号操作符(+)将两个类型兼容的数组加在一起来创建一个新的数组。新的数组类型是从你加在一起的两个数组类型推断的:

 

阅读(272) | 评论(0) | 转发(0) |
0

上一篇:第五章 集合类型

下一篇:第二节 字典

给主人留下些什么吧!~~