Swift数组
2016-07-09 15:31
302 查看
一、声明和创建数组
swift的声明数组变量有两种语法。使用泛型语法。数组类型的语法格式为:Array<类型>,此处的尖括号就是泛型语法。
使用简化语法。数组类型的语法格式为:[类型]。
例如,如下代码可用于声明数组变量。
//使用泛型语法声明数组 var myArr : Array<String> //使用简化语法声明数组 var names : [String] var nums : [Int]
仅仅声明数组变量还不能使用数组,程序还必须创建数组结构体,并将数组赋值给数组变量才能使用它们。创建数组也有两种方式。
使用Array的构造器创建数组
Array的构造体提供了如下3个常用的构造器。
init():创建一个空数组。
init(arrayLieral:):以指定的多个元素来创建数组。
init(count:,repeatedValue:):创建一个包含count个repeatedValue元素的数组。
下面程序为上面定义的3个数组变量创建了对应的数组。
myArr = Array<String>() //创建一个包含10个“fkit”元素的数组,并将该数组赋值给names变量。 names = [String](count: 10, repeatedValue: "fkit") //以指定的多个元素创建数组,并将数组赋值为nums变量 nums = [Int](arrayLiteral:12, 20, 30, -9, -29)
使用简化语法创建数组
数组的简化语法更加简洁,直接使用方括号列出多个数组值即可。
如下代码使用简化语法创建了数组。
var flowers : [String] = ["a","b","c","d"] var values = ["1","2","3","e"]
二、使用数组
数组提供了一个只读的count属性,通过这个属性可以方位到数组的长度,一旦获得了数组的长度,就可以通过循环来遍历该数组的每个数组元素。下面代码师范了输出flowers数组的每个数组元素的值。
for var i = 0; i < flowers.count; i++{ print(flowers[i]) }
除此之外,数组还提供了只读的startIndex和endIndex属性,其中startIndex返回该数组的第一个元素的索引,因此该属性总是返回0;endIndex返回该数组最后一个元素的索引+1,因此该属性的返回值与count属性的返回值相等。例如如下代码:
//访问flowers数组的第一个索引 print(flowers.startIndex) //访问flowers数组的最后一个索引(实际上返回最后一个元素的索引+1) print(flowers.endIndex)
三、使用for-in遍历数组
for-in循环遍历数组的语法格式如下:for element in array{ //element自动迭代访问每个元素 }
在上面语法中,element无须使用let声明,for-in循环将会隐式声明该常量。下面程序示范了如何使用for-in循环来遍历数组元素。
var books:[String] = ["疯狂iOS讲义","疯狂Swift讲义","疯狂Android讲义"] for book in books{ print(book) }
当使用for-in循环遍历、访问数组元素时,不允许对循环常量进行赋值,这是因为for-in循环隐式使用let来声明该变量,因为程序不能对循环常量赋值。
四、数组的可变性和数组的修改
添加元素Array提供了append(_:)方法添加元素,每调用该方法一次,程序就会在数组的最后添加一个元素,数组的长度也会自动加1.
如下代码调用Array的append(_:)方法添加元素。
//使用var定义一个可变数组 var languages = ["Swift"] //追加一个元素 Languages.append("GO") languages.append("Lua") //输出Swift,GO,Lua print(languages) print(languages.count)
除了调用append方法添加元素之外,Swift的数组还支持使用“+”执行加法,数组的加法可以添加另一个类型匹配的数组。例如如下代码
languages = languages + ["Ruby"] //上面代码可简写如下 languages += ["Ruby"] print(languages) print(languages.count)
插入元素
Array提供了insert(_:Element,atIndex:Int)方法插入元素。需要注意的是,该方法的第二个参数不能超过数组长度。(可以等于数组长度,此时效果与调用append方法完全相同)。
如下代码调用Array的insert()方法插入元素。
//使用var定义一个可变数组 var languages = ["Swift"] //插入一个元素 languages.insert["Go",atIndex:0] //插入一个元素,指定atIndex:2,表明该元素插入数组的最后 languages:insert["Ruby",atIndex:2] print(languages) print(languages.count)
数组和范围
Array支持在方括号中使用Range,这样既可以一次性地获取多个数组元素,也可一次性对多个数组元素进行赋值。
例如以下代码:
var languages = ["Swift","OC","PHP","Perl","Ruby","Go"] //获取languages数组中索引为1-4的元素 let subRange = languages[1..<4] print(subRange)//输出[OC,PHP,Perl] //将languages数组中索引为2-4的元素替换成"C/C++","Python" languages[2...4] = ["C/C++","Python"] print(languages) //将languages数组中索引为1-2的元素替换成"a","b","c" //两个元素换成三个元素 languages[1...2] = ["a", "b", "c"] print(languages)
正如上面代码所看到的,当程序对指定范围的数组元素赋值时,并不需要指定范围包含的元素个数与所赋值的元素个数相同,如果所赋值的元素少于范围内包含的元素个数,程序会自动减少Swift数组的长度;如果所赋值的元素多于范围内包含的元素个数,程序会自动增加Swift数组的长度。
正因为Swift的数组存在这种功能,因此程序可以用过这种方式添加或删除数组元素。例如,如下代码即可清空数组:
languages[0..<languages.count] = []
除此之外,数组还提供了replaceRange(_:With:)方法,该方法可以将数组的中间一段替换为指定的子数组。例如如下程序:
var characters = ["孙悟空","猪八戒","唐僧","牛魔王"] characters.replaceRange(1...3,with:["黄袍怪"]) print(characters)//输出["孙悟空","黄袍怪"]
删除元素
Array提供了如下方法来删除元素。
popLast()->Element:删除数组的最后一个元素,该方法返回即将删除的元素。
removeAtIndex(index:Int)->Element:删除指定索引处的元素,该方法返回即将删除的元素。
removeLast()->Element:删除数组的最后一个元素,该方法返回即将删除的元素。该方法和popLast方法的作用大致相同。
removeAll(keepCapacity:Bool = false):清空数组。其中keepCapacity参数指定是否保留数组底层的数据缓冲,该参数默认false,即不保留数据缓冲。
如下程序调用了上面方法来删除数组元素。
var languages = ["Swift","OC","PHP","Perl","Ruby","Go"] //删除索引为2的元素,即PHP languages.removeAtIndex(2) //再次删除索引为2的元素,即Perl languages:removeAtIndex(2) //删除最后一个元素 languages.removeLast() //删除所有元素 languages.removeAll()
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift自定义iOS中的TabBarController并为其添加动画
- Swift编程中的泛型解析
- Swift中定义二维数组的方法及遍历方法示例
- Swift实现Selection Sort选择排序算法的实例讲解
- 简单分析Swift语言的一些基本特征
- 使用 Swift 语言编写 Android 应用入门
- 理解二叉堆数据结构及Swift的堆排序算法实现示例
- Swift与C语言指针结合使用实例
- Swift心得笔记之控制流
- 用Swift构建一个简单的iOS邮件应用的方法
- 苹果公司推出的新编程语言Swift简介和入门教程
- Swift实现iOS应用中短信验证码倒计时功能的实例分享
- 使用Swift代码实现iOS手势解锁、指纹解锁实例详解
- 探讨Swift数组和字典
- Swift中的指针操作和使用详细介绍
- 详解Swift中的数据类型类型转换