Swift 系統學習 31 擴展 extension

//: Playground - noun: a place where people can play

import UIKit

// 適用場景一: 系統已有的類型無法滿足特定的需求
extension Double {
    var km: Double { return self * 1_000.0 }
    var m:  Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
}
var oneDouble: Double = 10.5.m
var twoDouble: Double = 120.45.km

extension Int {
    var square: Int { return self * self }
    var cube: Int { return self * self * self }
    func inRange(closedLeft: Int, closedRight: Int) -> Bool {
        return self >= closedLeft && self <= closedRight
    }
    func repeatitions(task: () -> Void) {
        for _ in 0..<self {
            task()
        }
    }
}
var imInt: Int = 5
imInt.cube
// imInt.repeatitions()

// 適用場景二:
//class CustomViewController: UIViewController {
//    
//}
//extension CustomViewController: UITableViewDataSource {
//    
//}
//extension CustomViewController: UITableViewDelegate {
//    
//}



Day07

回顧:
1. 類的聲明和初始化
  public class ClassName {
     各種屬性
     構造方法
     自定義方法
  }
2. 存儲屬性;  存儲屬性觀察器
    var propertyName: String {
      willSet(customValue) {
       }
      didSet(customOldValue) {
       }
    }
3. 計算型屬性: 通過複雜計算/通過其他的屬性結合計算
    var propertyName: String {
      get {
          return xxxx
       }
      set(customNewValue) {
       }
    }
4. 類型屬性: 作用類型(結構體/類)
      —> 屬性的值是不依賴於實例化對象
    static var typePropertyName: Int = 0
    TypeName. typePropertyName
5. 延遲存儲屬性: 沒有屬性觀察器語法
      —> 耗時 + 依賴於其他屬性初始化的值 + 只計算一次
    lazy var propertyName: Int = {
        // 業務邏輯
        return xxxxx
    }()

今天內容:
	·	訪問權限
	·	類型轉換Type Casting
	·	 協議

訪問權限Access Control: 可以設定代碼在某個文件內/模塊內可見或者不可見; 隱藏代碼的實現細節, 使得部分屬性/接口可訪問
1. 針對對象: 類/結構體/枚舉中的屬性/自定義方法/構造方法
2. 某個文件內/模塊Module內: 
    a. 模塊和Xcode等價描述: Framework; Target/app/Bundle
    b. 文件內和Xcode等價描述: 以.swift結尾的文件

3. 常用的四種權限設置:
    public:      公開的; 可以被模塊外訪問(SDK開發)
    internal:    內部的; 默認設置的值; 可以被本模塊內訪問
    fileprivate: 文件內私有; 只可以被文件內訪問
    private:     私有; 只可以在該類型內方法

4. 樣例: 類的訪問權限的實現
    [ 01_access_control ]
    —> 一般設置權限的原則: 權限從小到大
        a. 先把所有的類型都設置private(文件內可見)
        b. 再把哪些訪問的屬性/方法設置爲internal, 或者public
    —> 查看01_access_control的包的內容:
        a. Contents.swift: 內容文件
        b. playground是一個工作空間
        
    —> Sources: swift文件
    —> Resources: 圖片/配置文件......
         
    —> 在創建文件之後, 效果圖
          a. Sources整個文件夾認爲一個target
          b. Contents.swift認爲另一個target
         

/05_Swift/Day07/Day07-AM1.zip

5. 類型查看和類型轉換
 5.1. 類型查看運算符(Type Check Operator):  
  —> 描述: 查看某個實例常量/變量是否是那個類型; 是否是該類子類的實例對象; 
  -> 關鍵詞: is
 5.2. 類型轉換運算符(Type Casting Operator): 
  -> 描述: 對某個實例對象進行類型換(as?返回該類型的可選型; as!進行強制類型轉換)
  -> 關鍵詞: as! / as?

6.Any和AnyObject類型:
  6.1 AnyObject: 描述任意類類型(Class Type)的實例對象
  6.2 Any: 描述任意類型(類/結構體/枚舉/函數類型)的實例對象

7. 樣例(******): 類型查看和類型轉換; Any / AnyObject
    [ 02_type_check_casting ]
    —> 總結:
       a. is是還是不是
       b. as! as? 是否可以轉
       c. switch語句和as/is結合
       d. Any / AnyObject區分

/05_Swift/Day07/Day07-AM2.zip

————————— 下午內容 ———————
協議Protocol
1. 基本的協議的聲明和使用
  1.1 對象: 枚舉 / 結構體 / 類
  1.2 協議和OC一樣, 也可以繼承
  1.3 內容: 添加屬性(只讀/可讀可寫)和方法(init/自定義)
  1.4 樣例: 枚舉 / 結構體 / 類如何遵循自定義協議
       [ 03_basic_protocol ]
2. 適用場景
  2.1 樣例: 實現下面流程圖
       [ 04_other_protocol ]
       


/05_Swift/Day07/Day07-PM1.zip

擴展Extention
1. 描述: 對已存在的類型(枚舉/結構體/類)添加屬性和方法機制
2. 樣例: 對系統已存在的結構體添加擴展, 對自定義的類添加擴展
    [ 05_extention ]

3. Swift解析JSON格式數據樣例URL: 
http://api.openweathermap.org/data/2.5/weather?q=Barcelona,es&appid=ac02dc102cc17b974cd84206048d97d8
 3.1 原生NSURLSession類獲取JSON步驟:
     a. NSURLSession單例對象(如果設置session, 和URLSessionConfiguration結合)
     b. 創建Request對象(給定URL)
     c. 創建task任務對象(dataTask/downloadTask/uploadTask)
     d. 執行task(發送請求)
     e. 處理服務器的返回(completionHandler; delegate方法)
  3.2 樣例: 實現上面的步驟(沒有使用MVC)
     [ 06_json_parse ]
     —> 總結:
       a. 服務器返回的三個類型的數據都是可選型
       b. JSON對象轉Foundation對象是Any?(數組/字典)
       c. 從數組和字典取值也都是Any?

   3.3 課堂練習: 解析如下key的value
        a. 經緯度值: lon和lat
         
        b. “main”的Clear值
      

dataTask和downloadTask區別?
1. dataTask: 客戶端請求, 服務器返回的數據以NSData類型返回(內存中)
2. downloadTask: 客戶端請求, 服務器返回的數據直接存到沙盒內(磁盤中)



Day07知識點總結:
1. 掌握訪問權限設定(public/internal/fileprivate/private)
2. 掌握類型判斷和類型轉換(is/as/as!/as?)
3. 掌握自定義協議的創建和遵循語法










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