import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/**
数组是一系列相同类型的数据集合,存储相同类型的可重复的有序的多个数据。
Swift 数组存储特定类型的值。不同于Objective - C的 NSArray 和 NSMutableArray 类:
它们可以存储任何类型的对象,而且不提供对象的本质任何信息。
在Swift中,数组存储的数据值的类型必须是明确的,通过显式类型注释,或通过类型推断来保证,
而且没必要非是 class 类型。
例如:如果创建一个 Int 类型的数组,就不能向其中加入不是Int类型的任何数据。
Swift 数组是类型安全的,我们必须清楚数组中存储的类型
Swift 数组语法形式:Array<SomeType>,或者简写为 SomeType[] 。
其中 SomeType 表示数组存储的数据类型。
两种形式在功能上是一样的,但是推荐使用 SomeType[] 种写法,在本文中都会使用这种形式来
*/
let a :Array<Int> = [1,2,3,1]
print(a)
var shopList :Array<String> = ["eggs","milk","potato"]
print(shopList)
/*
shopList 数组被声明为变量(var关键字)而不是常量(let关键字)
所以 shopList 可能会被加入其他数据
由于 Swift 的类型推断机制,我们不必把数组的类型定义的很清楚。
所以 shoplist 的构造也可以这样写
var shopList = ["Eggs", "Milk"]
因为所有值都是相同的类型(String),Swift 可以推断出 shoplist 是 String类型数组
*/
let people : Array<String> = ["male","female"]
print(people)
//可以使用数组的只读属性 count 来获取数组中的元素的数量
print("people count == \(people.count)")
//使用 isEmpty属性(返回Bool值)检查 count 属性的值是否为 0
if people.isEmpty {
print("people is nil")
} else {
print("people is not nil")
}
//使用 append 方法在数组尾部增加新的元素:
shopList.append("apple")
print(shopList)
//直接使用下标语法来获取数组中的元素
//第一个元素在数组中的索引值是 0 而不是 1 。
//Swift 中的数组索引总是从零开始,与OC一样
let first = shopList[0]
let last = shopList.last
print("first is \(first) and last is \(last)")
/**
通过下标改变一系列数据值,即使新数据的数量和原有数据的数量是不一样的
不能使用下标语法在数组尾部添加新元素。
如果我们试着用这种方法对越界的索引数据进行访问或者设置新值,会引发一个运行时错误。
可以通过对索引值和数组的 count 进行比较来检查某个索引是否有效。
除了当 count = 0 时(说明这是个空数组),最大的索引值一直是 count - 1
*/
//MARK: [1...3]= ["bananas","pich"]
// 意思是从数组的第二个元素和第四个元素之间有 ["bananas","pich"]来代替
//第二个数组不能超过数组的个数 否则会报错
shopList [1...3] = ["bananas","pich"]
print(shopList)
//["eggs", "bananas", "pich"]
//使用数组的 insert (atIndex:) 方法在 atIndex 之前添加元素:
shopList.insert("chicken", atIndex: 0)
print(shopList)
//使用 removeAtIndex 方法来移除数组中的某一项。
//这个方法把数组在索引位置存储的元素移除,并返回这个被移除的元素
//元素移除后数组中的空出项会被自动填补,所以现在索引值为2的元素的值是pich
let shopList2 = shopList.removeAtIndex(2)
print(shopList2)
print(shopList)
/**
如果只想把数组中的最后一项移除,使用 removeLast 方法而不是 removeAtIndex 方法来避免获取数组的count属性。
removeLast 也会返回被移除的数据项
*/
//使用 for-in 循环遍历数组中所有元素
for string in shopList {
print(string)
}
//如果同时需要每个元素的值和索引值,可以使用属性 enumerate 来进行数组遍历。
//enumerate 返回一个由元素索引值和数据值组成的键值对。
//我们可以把这个键值对分解成临时常量或者变量来进行遍历
for (index,value) in shopList.enumerate() {
print("string \(index + 1) == \(value)")
}
//使用构造器创建一个特定数据类型的空数组
//someInts 被设置为变量类型是 Int 的数组
let array2 = [String]()
print("array2 == \(array2)")
let someInt:Array<Int> = []
print("someInt has \(someInt.count) items")
var array1 = [1,2,3]
//这个还可以清空数组
array1 = []
print("array1 has \(array1.count) items")
//数组还提供了创建特定大小并且元素被同时初始化的构造器。
//把数组的元素数量 count 和初始值 repeatedValue 传入数组即可
let three1 = Array(count: 3, repeatedValue: 1.1)
print(three1)
let three2 = Array(count: 3, repeatedValue: 2.1)
print(three2)
/// 使用加法操作符 + 来合并两种相同类型的数组
let six1 = three1 + three2
print(six1)
}
}