// 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)
}
}