您的位置:首页 > 移动开发 > Swift

学习Swift笔记 (四)

2014-07-14 14:32 155 查看
数组是一个同类型的序列化列表集合。字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合。

在Swift中,数组和字典的键和值都必须明确它的类型。这意味这数组和字典不会插入一个错误的类型的值,以致于出错。这也意味着当你在数组和字典中取回数值的时候能够确定它的类型。

 数组

数组是储存同类型不同值的序列化列表。同样的值可以在数组的不同位置出现多次。

Swift数组是储存确定的值,这个Objective-C中的NSArray和NSMutableArray类是有区别的。因为它们是储存各种的对象,而且并不提供返回任何有关对象的具体信息。在Swift中,无论是确定的声明,还是隐式的声明,数组是非常确定它自身是储存什么样的类型,而且,它并不一定要求储存的是类对象。所以Swift数组是类型安全的,因为它一直都确定它自身所能包含的值。

数组的简略语法

定义数组的完整写法是Array<SomeType>。
其中SomeType是你想要包含的类型。也可以使用类似于someType[]这样的简略语法。虽然这两种方法在功能上行是相同的。推荐后者。

数组实量 Array Literals

可以用一个数组实量(Array Literals)来初始化一个数组,它是用简略写法来创建一个包含 一个或多个值的 数组。

一个数组实量是由它包含的值, ","分隔符 已经包括以上内容的中括号对[]组成。(值,分隔符,中括号)

[value 1, value 2, value 3]
var shoppingList: String[]=["Eggs","Milk"]
//使用两个初始化参数来初始化shoppingList


shoppingList变量被定义为字符串(String)类型的数组,写作String[]。
因为这个数组被确定为字符串类型(String),所以它只能储存字符串(String)类型的值。

在上面的代码里,用两个字符串类型的值("Eggs" 和 "Milk")和数组实量(Array Literals)的写法来初始化shoppingList数组。

注意: shoppingList数组是被定义为一个变量(var)而不是常量(let),所以可以直接添加元素。

在上面的例子中,数组实量只包含两个字符串类型的值,这符合了shoppingList变量的定义,所以被分配的数组实量被允许用两个字符串类习惯的值来初始化。

当你用相同类型的额值来初始化时,你可以不写明类型。初始化shoppingList可以用下面这个方法代替。

var shoppingList2 = ["Eggs", "Milk"]

因为数组实量中所有的值都是同类型的。所以Swift能够推断choppingList的类型为字符串数组(String[])。

读取和修改数组

可以通过方法和属性,或者下标来读取和修改数组。

①通过只读属性count来读取数组的长度:

var shoppingList: String[]=["Eggs","Milk"]
println("The shopping list contains \(shoppingList.count) items")
//The shopping list contains 2 items

②通过一个返回bool类型的isEmpty属性,检查数组的长度是否为0
var shoppingList: String[]=["Eggs","Milk"]
if shoppingList.isEmpty{
println("The shopping list is empty")
}else{
println("The shopping list is not empty")
}
//The shopping list is not empty

③在数组末尾增加一个元素可以通过append方法
var shoppingList: String[]=["Eggs","Milk"]
shoppingList.append("bread")
println(shoppingList)
//[Eggs, Milk, bread]

④可以用(+=)操作符来把一个元素添加到数组末尾
var shoppingList: String[]=["Eggs","Milk"]
shoppingList += "cake"
println(shoppingList)
//[Eggs, Milk, cake]

⑤也可以用(+=)操作符把一个数组添加到另一个数组的末尾
var shoppingList: String[]=["Eggs","Milk"]
shoppingList += ["chocolate","cheese"]
println(shoppingList)
//[Eggs, Milk, chocolate, cheese]

⑥从数组中取出一个值可以使用下标语法。如果你知道一个元素的索引值,你可以数组名后面的中括号中填写索引值来获取这个元素
var shoppingList: String[]=["Eggs","Milk"]
var firstItem = shoppingList[0]
println(firstItem)
//Eggs

注意数组的第一个元素索引值为0 不为1。Swift的数组总是索引0。

⑦可以使用下标语法通过索引修改已经存在的值

var shoppingList: String[]=["Eggs","Milk"]
shoppingList[0] = "bread"
println(shoppingList)
//[bread, Milk]

⑧可以使用下标语法一次性改变一系列的值。尽管修改的区域远远大于要修改的值。
var shoppingList: String[]=["Eggs","Milk","Bananas", "Apples","Trees"]
shoppingList[2..4] = ["Oranges", "Piles"]
println(shoppingList)
//[Eggs, Milk, Oranges, Piles, Trees]

注意:不能使用下标语法在数组中添加一个元素。
可以通过count属性验证索引是否正确再使用它。当count为0时,数组为空;当count为-1超出了索引的有效范围,因为数组的索引总是从0开始的。

⑨在一个特定的索引位置插入一个值,可以使用insert(atIndex:)方法

var shoppingList: String[]=["Eggs","Milk","Bananas", "Apples","Trees"]
shoppingList.insert("Bread",atIndex:0)
println(shoppingList)
//[Bread, Eggs, Milk, Bananas, Apples, Trees]

⑩可以调用removeAtIndex方法移除特定的元素。这个方法移除特定索引位置的元素,已经返回这个被移除的元素。
var shoppingList: String[]=["Eggs","Milk","Bananas", "Apples","Trees"]
shoppingList.removeAtIndex(0)
println(shoppingList)
//[Milk, Bananas, Apples, Trees]

当元素被移除,数组空缺的位置将会被填补。

⑪如果想要从数组中移除最后一个元素,使用removeLast方法比removeAtIndex更方便。

var shoppingList: String[]=["Eggs","Milk","Bananas", "Apples","Trees"]
var newArray = shoppingList.removeLast()
println(shoppingList)
//[Eggs, Milk, Bananas, Apples]
⑫遍历数组 可以使用for-in循环来遍历数组中的值
var shoppingList: String[]=["Eggs","Milk","Bananas", "Apples","Trees"]
for item in shoppingList{
println(item)
}
//Eggs
//Milk
//Bananas
//Apples
//Trees
⑬如果需要每一个元素的整形的索引值,使用enumerate函数代替会更方便。enumerate函数对于每一个元素都会返回一个包含元素的索引和值的元组(tuple)。
var shoppingList: String[]=["Eggs","Milk","Bananas", "Apples","Trees"]
for (index, value) in enumerate(shoppingList){
println("\(index):\(value)")
}
//0:Eggs
//1:Milk
//2:Bananas
//3:Apples
//4:Trees
var shoppingList: String[]=["Eggs","Milk","Bananas", "Apples","Trees"]
for (index, value) in enumerate(shoppingList){
if index == 1{
println(value)
}
}
//Milk

创建和初始化数组
① 创建一个空的数组和确定的类型(不包含初始化值)使用的初始化语法:

var someInts = Int[]()
println("someInts is of type Int[] with \(someInts.count) items.")
//someInts is of type Int[] with 0 items.注意:someInt变量被确定为Int[],因为它使用生成Int[]的初始化方法。

② 如果上下文(context)已经提供类型信息,例如函数参数或者已经确定类型的常量和变量,也可以从空的数组实量创建一个空数组,写作[] (空的中括号对)。

var someInts = Int[]()
someInts.append(3)
println(someInts)
//[3]
var someInts = Int[]()
someInts.append(3)
println("someInts is of type Int[] with \(someInts.count) items.")
someInts = []
println("someInts is of type Int[] with \(someInts.count) items.")
//someInts is of type Int[] with 1 items.
//someInts is of type Int[] with 0 items.

③Swift数组类型也提供初始化方法来创建确定长度和提供默认数值的数组。可以通过这个初始化方法增加一个新的数组,元素的数量成为count,合适的默认值为repeatedValue
var array = Double[](count:3, repeatedValue:9.88)
println(array)
//[9.88, 9.88, 9.88]得益于类型推断,并不需要指明这个数组储存的类型就能使用这个初始化方法
var array = Array(count:3, repeatedValue:9.88)
println(array)
//[9.88, 9.88, 9.88]

④可以使用(+)操作符就能创建一个新的数组,把两个存在的数组添加进来,这个新的数组类型从你添加的两个数组中推断出来
var array1 = Array(count:3, repeatedValue:9.88)
var array2 = Double[](count:3, repeatedValue:0.12)
var array3 = array1 + array2
println(array3)
//[9.88, 9.88, 9.88, 0.12, 0.12, 0.12]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: