//
// ViewController.swift
// 011-数组
//
// Created by 庄壮勇 on 2018/1/3.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
demo5 ()
}
// MARK: - 数组的合并
func demo5() {
var array:[ Any ] = [ "张三" , "小芳" , "小羊" ]
let array2 = [ "老刀" , "1" , "2" , 180 ] as [ Any ]
// 将array2 的内容合并到 array
// ***注意: 要合并数组的类型必须一致
array += array2
print (array)
}
// MARK: - 数组的容量
func demo4() {
// 定义一个数组,指定类型是 存放Int 的数组,但是没有初始化
// var array:[Int]
// // 给数组进行初始化
// array = [Int]()
// 以上两句代码可以合并成一句
var array = [ Int ]()
print ( "初始容量 \ ( array. capacity )" )
for i in 0 ..< 8 {
array. append (i)
print ( " \ ( array ) 容量 \ ( array. capacity )" )
}
}
// MARK: - 数组的增/删/改
func demo3() {
// OC 中数组分可变NSMutableArray(var) 不可变 NSArray(let)
var array = [ "张三" , "小芳" , "小羊" ]
// 追加元素
array. append ( "老王" )
print (array)
// 修改,通过下标定位
array[ 0 ] = "小王"
print (array)
// 数组越界 - Index out of range
//array[5] = "XXXX"
//print(array)
// 删除
array. remove (at: 3 )
print (array)
// 删除全部,并且保留空间
array. removeAll (keepingCapacity: true )
print ( " \ ( array ) \ ( array. capacity )" )
}
// MARK: - 数组的遍历
func demo2() {
let array = [ "张三" , "小芳" , "小羊" ]
// 1.按照下标遍历
print ( "--- 按照下标遍历" )
for i in 0 ..<array. count {
print (array[i])
}
// 2.for in 遍历元素
print ( "--- 按照下标遍历" )
for s in array {
print (s)
}
// 3. enum block 遍历, 同时遍历下标和内容
print ( "--- 同时遍历下标和内容" )
// 元组
for e in array. enumerated () {
print ( " \ ( e.offset ) \ ( e.element )" )
}
// 4. 遍历下标和内容2
print ( "--- 遍历下标和内容2" )
// n 就是索引下标
// s 就是[String] 数组 n 对应的 String 元素
// 其中 n / s 的名字可以随便写
for (n,s) in array. enumerated () {
print ( " \ ( n ) \ ( s )" )
}
// 5. 反序遍历
print ( "--- 反序遍历" )
for s in array. reversed () {
print (s)
}
// 6. 错误的反序索引&内容
print ( "--- 错误反序索引&内容" )
for (n,s) in array. reversed (). enumerated () {
print ( " \ ( n ) \ ( s )" )
}
// 7. 正确的反序
print ( "--- 正确反序索引&内容" )
// 先枚举,再反序
for (n,s) in array. enumerated (). reversed () {
print ( " \ ( n ) \ ( s )" )
}
}
// MARK: - 数组的定义
func demo1() {
// OC 使用[] 定义数组,Swift一样,但是没有'@'
// 自动推导的结果[String] -> 表示数组中存放的都是String
// 跟OC 中的数组指定泛型类似
let array = [ "张三" , "小芳" , "小羊" ]
print (array)
// [Int] -> 表示存放的都是Int
// Swift 中基本数据类型不需要包装!
let array2 = [ 1 , 2 , 3 , 4 , 5 ]
print (array2)
// CG结构体
let p = CGPoint (x: 10 , y: 300 )
// [CGPoint]
let array3 = [p]
print (array3)
// 混合数组: 开发中几乎不用,因为数组是靠下标索引
// 如果数组中的类型不一致,自动推导的结果[NSObject]
// 在Swift 中还有一种类型[AnyObject] -> 任意对象
// 在Swift 中一个类可以没有任何‘父类’
NSValue (cgPoint: p)
let array4 = [ "张三" , 1 , NSValue (cgPoint: p)] as [ Any ]
print (array4)
}
}
// ViewController.swift
// 011-数组
//
// Created by 庄壮勇 on 2018/1/3.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
demo5 ()
}
// MARK: - 数组的合并
func demo5() {
var array:[ Any ] = [ "张三" , "小芳" , "小羊" ]
let array2 = [ "老刀" , "1" , "2" , 180 ] as [ Any ]
// 将array2 的内容合并到 array
// ***注意: 要合并数组的类型必须一致
array += array2
print (array)
}
// MARK: - 数组的容量
func demo4() {
// 定义一个数组,指定类型是 存放Int 的数组,但是没有初始化
// var array:[Int]
// // 给数组进行初始化
// array = [Int]()
// 以上两句代码可以合并成一句
var array = [ Int ]()
print ( "初始容量 \ ( array. capacity )" )
for i in 0 ..< 8 {
array. append (i)
print ( " \ ( array ) 容量 \ ( array. capacity )" )
}
}
// MARK: - 数组的增/删/改
func demo3() {
// OC 中数组分可变NSMutableArray(var) 不可变 NSArray(let)
var array = [ "张三" , "小芳" , "小羊" ]
// 追加元素
array. append ( "老王" )
print (array)
// 修改,通过下标定位
array[ 0 ] = "小王"
print (array)
// 数组越界 - Index out of range
//array[5] = "XXXX"
//print(array)
// 删除
array. remove (at: 3 )
print (array)
// 删除全部,并且保留空间
array. removeAll (keepingCapacity: true )
print ( " \ ( array ) \ ( array. capacity )" )
}
// MARK: - 数组的遍历
func demo2() {
let array = [ "张三" , "小芳" , "小羊" ]
// 1.按照下标遍历
print ( "--- 按照下标遍历" )
for i in 0 ..<array. count {
print (array[i])
}
// 2.for in 遍历元素
print ( "--- 按照下标遍历" )
for s in array {
print (s)
}
// 3. enum block 遍历, 同时遍历下标和内容
print ( "--- 同时遍历下标和内容" )
// 元组
for e in array. enumerated () {
print ( " \ ( e.offset ) \ ( e.element )" )
}
// 4. 遍历下标和内容2
print ( "--- 遍历下标和内容2" )
// n 就是索引下标
// s 就是[String] 数组 n 对应的 String 元素
// 其中 n / s 的名字可以随便写
for (n,s) in array. enumerated () {
print ( " \ ( n ) \ ( s )" )
}
// 5. 反序遍历
print ( "--- 反序遍历" )
for s in array. reversed () {
print (s)
}
// 6. 错误的反序索引&内容
print ( "--- 错误反序索引&内容" )
for (n,s) in array. reversed (). enumerated () {
print ( " \ ( n ) \ ( s )" )
}
// 7. 正确的反序
print ( "--- 正确反序索引&内容" )
// 先枚举,再反序
for (n,s) in array. enumerated (). reversed () {
print ( " \ ( n ) \ ( s )" )
}
}
// MARK: - 数组的定义
func demo1() {
// OC 使用[] 定义数组,Swift一样,但是没有'@'
// 自动推导的结果[String] -> 表示数组中存放的都是String
// 跟OC 中的数组指定泛型类似
let array = [ "张三" , "小芳" , "小羊" ]
print (array)
// [Int] -> 表示存放的都是Int
// Swift 中基本数据类型不需要包装!
let array2 = [ 1 , 2 , 3 , 4 , 5 ]
print (array2)
// CG结构体
let p = CGPoint (x: 10 , y: 300 )
// [CGPoint]
let array3 = [p]
print (array3)
// 混合数组: 开发中几乎不用,因为数组是靠下标索引
// 如果数组中的类型不一致,自动推导的结果[NSObject]
// 在Swift 中还有一种类型[AnyObject] -> 任意对象
// 在Swift 中一个类可以没有任何‘父类’
NSValue (cgPoint: p)
let array4 = [ "张三" , 1 , NSValue (cgPoint: p)] as [ Any ]
print (array4)
}
}