![【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第1页](http://file4.renrendoc.com/view/2679be6cb812a8d047af091f54a95a38/2679be6cb812a8d047af091f54a95a381.gif)
![【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第2页](http://file4.renrendoc.com/view/2679be6cb812a8d047af091f54a95a38/2679be6cb812a8d047af091f54a95a382.gif)
![【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第3页](http://file4.renrendoc.com/view/2679be6cb812a8d047af091f54a95a38/2679be6cb812a8d047af091f54a95a383.gif)
![【移动应用开发技术】Swift编程高级教程(三)集合类型-数组_第4页](http://file4.renrendoc.com/view/2679be6cb812a8d047af091f54a95a38/2679be6cb812a8d047af091f54a95a384.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度可再生能源并网合同范本
- 金华浙江金华永康市环境卫生管理处工作人员招聘笔试历年参考题库附带答案详解
- 西安2025年陕西西安音乐学院专任教师招聘20人笔试历年参考题库附带答案详解
- 舟山2025年浙江舟山市定海区昌国街道招聘公益性岗位笔试历年参考题库附带答案详解
- 八年级上学期1月期末语文试题(PDF版无答案)-3
- 漯河2024年河南漯河西城区现代服务业开发区工作委员会人才引进笔试历年参考题库附带答案详解
- 温州浙江温州平阳县科学技术局招聘编外工作人员笔试历年参考题库附带答案详解
- 温州2025年浙江温州永嘉县人民医院医共体永嘉县妇幼保健院招聘(一)笔试历年参考题库附带答案详解
- 泉州2025年福建南安市卫生事业单位招聘编制内卫生类工作人员51人笔试历年参考题库附带答案详解
- 普洱2025年云南普洱第二中学招聘编外教学人员笔试历年参考题库附带答案详解
- 广西壮族自治区北海市2024-2025学年九年级上学期1月期末化学试题(含答案)
- 2025年浙江绍兴杭绍临空示范区开发集团有限公司招聘笔试参考题库附带答案详解
- 2024年殡仪馆建设项目可行性研究报告(编制大纲)
- 基本药物制度政策培训课件
- 2025年3月日历表(含农历-周数-方便记事备忘)
- 小红书营销师(初级)认证理论知识考试题库(附答案)
- 2025年民营医院工作总结及2025年工作计划
- 2025年九年级物理中考复习计划
- 急诊科护理未来五年规划
- 农业机械设备供货及售后服务方案
- 《跟单信用证统一惯例》UCP600中英文对照版
评论
0/150
提交评论