一天一点,好好学习
前进就是动力,动力推动前进
数组:
数组使用有序列表存储同一类型的多个值,相同的值可以多次出现在同一个数组的不同位置.
Swift数组特定于它所存储元素的类型.这与OC的NSArray和NSMutableArray不同,这两个类可以存储任意类型的对象,并且不提供所返回对象的任何特定信息.在swift中,数据值在呗存储进入某个数组之前必须明确,方法是通过显示的类型标注或类型推断,而且不是必须是Class类型.
eg:
我们创建了一个Int类型的数组,那么我们就不能往里面存储其他类型的数据.
因此,Swift中的数组是类型安全的,并且它们包含的类型必须明确.
好啦:口水话也不多说了,看Code明确一切:走起
//
// ViewController.swift
// SwiftArrayAndDictionary
//
// Created by NapoleonBai on 14-11-13.
// Copyright (c) 2014年 NapoleonBai. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.managerArray()
}
/**
此函数用来管理数组
*/
func managerArray(){
//定义一个数组对象
//1.不指定参数类型
var array = ["曹操","刘备","孙权"]
println("array 一共有 \(array.count) 个item") //array 一共有 3 个item
//2.指定数组类型
var arrayTwo : [String] = ["魏","蜀","吴"]
//如果采用 String[] ,这里会抛出error,这种做法是在开始的beta版允许
if arrayTwo.isEmpty{
//这是数组自带的方法,用来判断是否为空
println("arrayTwo 为空,没有元素可取")
}else{
println("arrayTwo 第一个选项为: \(arrayTwo[0])") //arrayTwo 第一个选项为: 魏
}
//这里的取值方式同多种语言一样,都是根据下标获取
//3.创建空数组
var arrayThree = [Int] ()
//使用append添加数组元素
arrayThree.append(999)
arrayThree.append(888)
println("arrayThree 的值为 \(arrayThree)") //arrayThree 的值为 [999, 888]
//4.创建指定大小的数组,并赋值
var arrayDoubles = [Double](count: 5, repeatedValue: 0.0)
println("the arrayDoubles = \(arrayDoubles)") //the arrayDoubles = [0.0, 0.0, 0.0, 0.0, 0.0]
//so,我们怎样拼接两个数组呢?那么请看
// 通过类型自动推测,不用指定特定类型
var arrayOtherDoubles = Array(count: 3, repeatedValue: 99.9)
// 两个数组相加,新数组的类型会根据这两个数组的类型推断出来
// 特别注意,一般只支持同类型的数组相拼接
var addDoubles = arrayDoubles + arrayOtherDoubles
println("addDoubles = \(addDoubles)") //addDoubles = [0.0, 0.0, 0.0, 0.0, 0.0, 99.9, 99.9, 99.9]
//当然,如果
//eg:
var arrayTest = Array(count:2,repeatedValue:"哈哈")
//var arrarAddTest = arrayDoubles + arrayTest //error: Cannot invoke '+' with an argument list of type '(@lvalue [(Double)],@lvalue Array<String>)'
var arrayTestTwo = [Int](count: 2, repeatedValue: 33)
//var arrayAddTest = arrayDoubles + arrayTestTwo //error:同上种类型类似
//继续添加arrayTwo数组中
arrayTwo.append("三国魏")
arrayTwo.append("三国蜀")
arrayTwo.append("三国吴")
//这样的话,arrayTwo中有六个元素了
println("the arrayTwo = \(arrayTwo)") //改变前:the arrayTwo = [魏, 蜀, 吴, 三国魏, 三国蜀, 三国吴]
//如果我们想更换其中的元素,那么我们应该怎么做呢?
//arrayTwo[6]="三国蜀黍" // fatal error: Array index out of range
//println("the arrayTwo[6] = \(arrayTwo[6])")
//下标越界了,不好意思,一下子就忘了哈,那如果我们遇到了该怎么处理呢?
//先暂时保留这个问题哈
arrayTwo[5] = "三国蜀黍"
println("the arrayTwo = \(arrayTwo)") //改变后:the arrayTwo = [魏, 蜀, 吴, 三国魏, 三国蜀, 三国吴]
//如果,我们需要在某个值之间插入某个值了,怎么办?
//下面我们就在数组第一个位置插入'小白杨'
arrayTwo.insert("小白杨", atIndex: 0)
println("the arrayTwo = \(arrayTwo)") //the arrayTwo = [小白杨, 魏, 蜀, 吴, 三国魏, 三国蜀, 三国蜀黍]
//然后我们发现,我们insert错了数组,于是乎,就需要删除这个值,是不是?
//好吧,我们怎么删除呢?
//eg:
arrayTwo.removeAtIndex(0)
println("remove index=0 item after ,the array = \(arrayTwo)") //remove index=0 item after ,the array = [魏, 蜀, 吴, 三国魏, 三国蜀, 三国蜀黍]
//看到了吧果然删除了,当然了,删除还有
//arrayTwo.removeLast() //移除最后一个元素
//arrayTwo.removeAll(keepCapacity: true) //移除所有元素
//到这里,数组就差不多讲解完毕了
//当然,上面提到一个问题,就是数组越界的问题,那么我们怎么处理呢?
//这就很简单了嘛,判断一下下就OK了呀...嘻嘻
//对了,搬回来一下下,还有很强大的数组遍历还没有提到,是不是?
//嘻嘻,继续
for tempData in arrayTwo{
println("the tempData=\(tempData)")
/*
the tempData=魏
the tempData=蜀
the tempData=吴
the tempData=三国魏
the tempData=三国蜀
the tempData=三国蜀黍
*/
}
//其实在前面已经说过了,只是本篇没有而已
//为什么不需要var tempData呢?这个就是for遍历提供的方便了,in 前面的自动设置为临时变量,我们只需要负责命名即可
//那还有没有其他遍历方式呢?请看下面
for (index, value) in enumerate(arrayTwo) {
println("第 \(index + 1) 个元素: \(value)")
/*
第 1 个元素: 魏
第 2 个元素: 蜀
第 3 个元素: 吴
第 4 个元素: 三国魏
第 5 个元素: 三国蜀
第 6 个元素: 三国蜀黍
*/
}
/*
这是使用全局enumerate函数来进行数组遍历,因为enumerate返回一个由每一个数据项索引值和数据值组成的元组,即可得到索引值和值,根据个人需要吧
当然,还有更多的方式,就靠自己去挖掘了...
开挖掘机去...嘻嘻
那么,问题来了...
*/
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
今天的注释有点稀疏,因为想把文字多提出来写,但是发现时间又不是很多.
吃掉晚饭已是九点多,然后看点其他的东东,再研究一下这个,就很晚了... ...
所以很多能节省就节省了...嘻嘻
不过,有什么不清楚的,可以提出来,大家一起研究研究,毕竟,我也刚开始学.
当然了,这里的code,抛开了beta版的使用方式,所以,勿怪
时间不早了,洗洗睡吧
当然,不得不多提一句:
如果用var 定义的数组,那么可以手动添加元素,比如append,insert这样,并且也可以修改:array[0]="update"
如果用let定义的数组,那么就不能了.也类似于可变和不可变之分吧