Swift3.0学习之GCD

来源:互联网 发布:阿里云虚拟主机能装ss 编辑:程序博客网 时间:2024/05/20 16:12
  昨天开始学习了swift3.0这门语言,发现它和c、c++、Object-c、java有很多相同的地方,她很好地融入了以上4种语言,并且它可以用SQS来形容,simply、qucikly、stably,意思就是更简洁、更快、更稳定。  但随着学习的深入,我觉得对swift3.0有些许不适应,体现在Object-C语言中的GCD,NSThread、NSOperation等线程通信。在Swift语言中对以上几种线程通信进行了重写,写法和以前完全不同。为了让读者更好地理解,我举了一个闭包回调+线程通信的例子,如下:

swift2.0写法

class HttpTool: NSObject {    var callBack : (()->())?    // 闭包的类型:(参数列表)->(返回值)    // 建议:以后写闭包类型直接:()->()    func requestData(callBack : ()->()) {        self.callBack = callBack        dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in            print("正在网络请求:\(NSThread.currentThread())")            dispatch_async(dispatch_get_main_queue(), { () -> Void in                callBack()            })        }    }}

swift3.0写法

//在一个异步队列中读取数据, 然后再返回主线程更新 UI, 这种操作在新的 Swift 语法中是这样的 DispatchQueue.global(qos: .background).async { [weak self]        () -> Void in        self?.flickrPhoto.loadLargeImage            {                loadedFlickrPhoto, error in                if error != nil {                    print("error:\(error)")                } else {        DispatchQueue.main.async {            () -> Void in            activityIndicator.removeFromSuperview()            self?.imageView.image = self?.flickrPhoto.largeImage                    }                }        }    }
0 0
原创粉丝点击