Swift4.0 學習筆記 第八節:數組

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章