昨天开始学习了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
}
}
}
}