swift 3.0 閉包,專案使用例子,結合GCD

lkycan發表於2017-12-14

國慶長假,不想一行白鷺上青天,回家擠在在最中間。就把征戰已久的古董pro挖出,硬生生升到了macOS Sierrra,跑起了 Xcode 8 ,寫起了swift。 先來一波實用乾貨。 swift 閉包專案的實際應用,和objective-c 的 Block 類似。

HttpTool 工具類###

import UIKit

class HttpTool: NSObject {
    // 閉包的型別: (引數列表) -> (返回值型別)
    func loadData(_ callBack : @escaping (_ jsonData : String) -> ()) {
   //這裡跟之前的區別不大,引數有些差異
        DispatchQueue.global(qos: .userInitiated).async { () -> Void in
            print("傳送網路請求:\(Thread.current)")
            
            DispatchQueue.main.sync(execute: { () -> Void in
                print("獲取到資料,並且進行回撥:\(Thread.current)")
                
                callBack("jsonData資料")
            })
        }
    }
}
複製程式碼

###swift 3.0 GCD 要點解析 ###

public enum QoSClass {

        case background

        case utility

        case `default`

        case userInitiated

        case userInteractive

        case unspecified

        public init?(rawValue: qos_class_t)

        public var rawValue: qos_class_t { get }
    }


與之前對應的是:
DISPATCH_QUEUE_PRIORITY_HIGH:        .userInitiated 
DISPATCH_QUEUE_PRIORITY_DEFAULT:     .default 
DISPATCH_QUEUE_PRIORITY_LOW:         .utility 
DISPATCH_QUEUE_PRIORITY_BACKGROUND:  .background

複製程式碼

###ViewController###

import UIKit

class ViewController: UIViewController {
    
    var tools : HttpTool = HttpTool()
    //點選獲取資料
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        tools.loadData { (jsonData) -> () in
             print("在ViewController拿到資料:\(jsonData)")
         
        }
    }
    
    
}
複製程式碼

文中程式碼是早期受了MJ的影響,結合了現在swift 3.0 的GCD的一些修改。 我是一名大叔,也是前端么叔。

相關文章