【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第1页
【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第2页
【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第3页
【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】Swift编程高级教程(三)集合类型-数组

Swift语言提供了两种集合数据类型:数组和字典,数组是一系列相同类型的变量值有序存储;字典是一系列相同类型的变量值的无序存储,可以通过一个唯一标识符(键)来引用和查找。数组和字典总是能识别自己所能够存储的键值的类型,就是说,我们不能够往这两个容器内插入错误的类型。显式类型声明的集合能确保我们的代码总是能识别其所能存储的变量类型,并能够让我们在实际编码中捕捉到出现的任何类型错误。提示Swift的数组类型的变量在常量,变量赋值或者给函数和方法传参的时候会表现出和其他类型不一样的行为。提示Swift的数组类型的变量在常量,变量赋值或者给函数和方法传参的时候会表现出和其他类型不一样的行为。数组数组在一个有序列表中存储相同类型的多个值,而且相同值可以在不同位置重复存储。Swift数组不和Objective-C的数组那样可以存储任意Objective-C的对象,她是存贮指定类型的值;他的类型信息是非常明确的,不管显式类型标记或者隐式类型来推断,他总是有确定的一个类型,而且也没有必定是一个类对象。比如你在一个Int类型的数组里,你能且只能往里面插入Int类型的变量,其他任何值都不行。故Swift的数组是类型安全的!Swift数组类型的一般书写的完×××式是Array<SomeType>,其中SomeType为该数组所允许存储元素的数据类型,我们也可以用这样的简写方式:SomeType[]。这两种形式的写法本质上是完全相同的,但是我们更喜欢使用简写的方式,并在后续的教程里都用这个形式,大茶也相信读者们肯定也喜欢简写方式的。我们可以用一个数组字面常量来初始化一个数组变量。数组的字面常量书写方式如下:[value1,

value2,

value3,

value1]下面的例子创建一个叫做shoppingList的数组来存储String类型值:var

shoppingList:

String[]

=

["Eggs",

"Milk"]//

把shoppingList初始化为两个初始数据元素这个shoppingList变量通过String[]形式被声明为一个String类型值的数组,因为这个特定的数组被指定了值类型String,所以我们只能用这个数组类存储String值,这里我们存储了两个字面常量String值(“Eggs”和“Milk”)。提示这个shoppingList是声明为变量(var说明符)而不是声明为常量(let说明符),因为后面的例子里将有更多的元素被加入这个数组.提示这个shoppingList是声明为变量(var说明符)而不是声明为常量(let说明符),因为后面的例子里将有更多的元素被加入这个数组.这里,这个字面常量数组只包含了2个String值,他能匹配shoppingList数组的类型声明,所以可以用他来给shoppingList变量赋值初始化。得益于Swift的类型推断机制,我们在用数组字面常量来初始化一个数组时不需要明确指定他的类型,用如下这个很方便的方式:var

shoppingList

=

["Eggs",

"Milk"]因为这个字面常量数组里的都是相同类型值,Swift编译器可以推断出该数组变量正确的数据类型是String[]我们可以通过数组的方法或者属性或者下标运算符来对一个数组进行访问和修改。要得到一个数组的元素的个数,我们可以用他的只读属性count来获取。println("Tht

shopping

list

contains

\(shoppingList.count)

items.")//

prints

"The

shopping

list

contains

2

items."数组有一个叫做isEmpty的属性来表示该数组是否为空,即count属性等于0:if

shoppingList.isEmpty

{

println("The

shopping

list

is

empty.")

}

else

{

println("Tht

shopping

list

is

not

empty.")

}//

prints

"The

shopping

list

is

not

empty."我们可以调用数组的append方法在数组的末尾追加一个新的元素:shoppingList.append("Flour")//

shoppingList

now

contains

3

items,

and

someone

is

making

pancakes或者更简单的达到这一目的,可以用符合运算符(+=):shoppingList

+=

"Baking

Powder"//shoppingList

now

contains

4

items我们还有可以直接给一个数组加上另一个类型一致的数组:shoppingList

+=

["Chocolate

Spread",

"Cheese",

"Butter"]//

shoppingList

now

contains

7

itemsSwift数组的下标运算和其他语言类似,下标都是从0开始,我们可以直接用下标来存取数组里面的元素;此外,Swift的数组新增了一个功能就是可以通过下标来进行区间赋值了var

firstItem

=

shoppingList[0]//

firstItem

is

equal

to

"Eggs"shoppingList[0]

=

"Six

eggs"//

the

first

item

in

the

list

is

now

equal

to

"Six

eggs"

rather

than

"Eggs"提示我们不能用下标的形式来给一个数组追加一个或者多个新的元素。如果下标越界将会触发一个运行时的错误,所以我们在用下标进行运算的时候时刻要记得去检测我们所用的下标是否越界,可以通过比较我们的下标index是否大于最大的有效的下标值(count-1)提示我们不能用下标的形式来给一个数组追加一个或者多个新的元素。如果下标越界将会触发一个运行时的错误,所以我们在用下标进行运算的时候时刻要记得去检测我们所用的下标是否越界,可以通过比较我们的下标index是否大于最大的有效的下标值(count-1)数组的插入和删除当我们需要在数组的某个地方插入一个新的元素的时候,可以调用数组的方法insert(atIndex:);shoppingList.insert("Maple

Syrup",

atIndex:

0)//

shoppingList

now

contains

7

items//

"Maple

Syrup"

is

now

the

first

item

in

the

list当我们需要在数组的某个地方移除一个既有元素的时候,可以调用数组的方法removeAtIndex,该方法的返回值是被移除掉的元素;let

mapleSyrup

=

shoppingList.removeAtIndex(0)//

the

item

that

was

at

index

0

has

just

been

removed//

shoppingList

now

contains

6

items,

and

no

Maple

Syrup//

the

mapleSyrup

constant

is

now

equal

to

the

removed

"Maple

Syrup"

string当特殊情况我们需要移除数组的最后一个元素的时候,我们应该避免使用removeAtIndex方法,而直接使用简便方法removeLast来直接移除数组的最后一个元素,removeLast方法也是返回被移除的元素。let

apples

=

shoppingList.removeLast()//

the

last

item

in

the

array

has

just

been

removed//

shoppingList

now

contains

5

items,

and

no

cheese//

the

apples

constant

is

now

equal

to

the

removed

"Apples"

string在Swift语言里,我们可以用快速枚举(for-in)的方式来遍历整个数组的元素:for

item

in

shoppingList

{

println(item)

}//

Six

eggs//

Milk//

Flour//

Baking

Powder//

Bananas如果在快速枚举的循环体内部需要获取每个元素所对应的序号,我们可以嵌套一个全局方法enumerate来代替数组遍历,该方法为数组里的每一项返回一个封装了序号与元素值的元组类型变量,我们可以在快速枚举遍历过程中把该元组里的值提取到合适的临时变量或者常量中:for

(index,

value)

in

enumerate(shoppingList)

{

println("Item

\(index

+

1):

\(value)")

}//

Item

1:

Six

eggs//

Item

2:

Milk//

Item

3:

Flour//

Item

4:

Baking

Powder//

Item

5:

Bananas我们可以用如下的语法来初始化一个确定类型的空的数组(没有设置任何初始值):var

someInts

=

Int[]()println("someInts

is

of

type

Int[]

with

\(someInts.count)

items.")//

prints

"someInts

is

of

type

Int[]

with

0

items.变量someInts的类型会被推断为Int[],因为他被赋值为一个Int[]类型的初始化方法的结果。如果程序的上下文已经提供了其类型信息,比如一个函数的参数,已经申明了类型的变量或者常量,这样你可以用一个空数组的字面常量去给其赋值一个空的数组(这样写[]):someInts.append(3)//

someInts

now

contains

1

value

of

type

IntsomeInts

=

[]//

someInts

is

now

an

empty

array,

but

is

still

of

type

Int[]Swift的数组同样也提供了一个创建指定大小并指定元素默认值的初始化方法,我们只需给初始化方法的参数传递元素个数(count)以及对应默认类型值(repeatedValue):var

threeDoubles

=

Double[](count:

3,

repeatedValue:

0.0)//

threeDoubles

is

of

type

Double[],

and

equals

[0.0,

0.0,

0.0]同样得益于Swift语言的类型推断,我们在用这个初始化方法的时候也可以不需要指定数组里面所存储元素类型,他会自动去判断那个提供的默认值的类型:var

anotherThreeDoubles

=

Array(count:

3,

repeatedValue:

2.5)//

anotherThreeDoubles

is

inferred

as

Double[],

and

equals

[2.5,

2.5,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论