下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年张家口职业技术学院单招职业倾向性测试题库带答案详解
- 2026年湖南工程职业技术学院单招职业倾向性测试题库及答案详解一套
- 2026年辽宁民族师范高等专科学校单招职业技能考试题库及参考答案详解1套
- 2026年杭州医学院单招职业倾向性测试题库及答案详解1套
- 2026年德宏职业学院单招职业倾向性考试题库及参考答案详解一套
- 2026年南通职业大学单招职业适应性测试题库参考答案详解
- 2026年武汉警官职业学院单招职业倾向性考试题库及参考答案详解一套
- 2026年广东水利电力职业技术学院单招职业技能测试题库及完整答案详解1套
- 2026年新疆应用职业技术学院单招职业倾向性测试题库含答案详解
- 2026年商丘职业技术学院单招职业倾向性测试题库带答案详解
- 工程招投标与监理实务整体介绍吴莉四川交通04课件
- 2025+CSCO宫颈癌诊疗指南解读
- DG-TJ08-2207-2024城市供水管网泵站远程监控系统技术标准
- 机器学习与随机微分方程的深度集成方法-全面剖析
- 《TSGD7003-2022压力管道定期检验规则-长输管道》
- GB/T 45355-2025无压埋地排污、排水用聚乙烯(PE)管道系统
- 2025年全国硕士研究生入学统一考试 (数学二) 真题及解析
- 企业管理者的领导力培训
- There+be句型练习题及答案
- 《阻燃腈纶的研究与应用》课件
- 吊索具的使用与报废标准
评论
0/150
提交评论