目錄:[Swift]Xcode實際操做html
本文將演示如何經過異步請求的方式,下載網絡圖片。swift
異步請求與同步請求相比,不會阻塞程序的主線程,而會創建一個新的線程。網絡
在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】閉包
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 //給當前視圖控制器類,添加一個圖像視圖屬性。 6 //該圖像視圖對象,將用來顯示下載的網絡圖片 7 var imageView = UIImageView() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // Do any additional setup after loading the view, typically from a nib. 12 13 //設置圖像視圖對象的位置在(40,80),尺寸爲(240,80) 14 self.imageView.frame = CGRect(x: 40, y: 80, width: 240, height: 280) 15 //將設置好的圖像視圖對象,添加到當前視圖控制器的根視圖 16 self.view.addSubview(imageView) 17 18 //建立一個網址對象,指定請求網絡圖片的地址 19 let url = URL(string: "http://images.apple.com/v/imac/e/images/overview/imac_27_hero_large_2x.jpg") 20 //建立一個網絡請求對象 21 let request = URLRequest(url: url!) 22 23 //利用網絡鏈接對象NSURLConnectiony,實現網絡的通訊 24 //網絡鏈接對象NSURLConnectiony已經不被推薦使用,請使用NSURLSession網絡會話類 25 NSURLConnection.sendAsynchronousRequest(request, 26 queue: OperationQueue.main, 27 completionHandler: {(response:URLResponse?, 28 data:Data?,error:Error?)->Void in 29 //在控制檯輸出當前的線程是否位於主線程 30 print(Thread.isMainThread) 31 //添加一個閉包語句,返回應用的主線程 32 DispatchQueue.main.async(execute: { () -> Void in 33 //將網絡返回的數據對象,轉換爲圖像格式, 34 let image = UIImage(data: data!) 35 //而後在主線程裏更新圖像視圖的顯示內容 36 self.imageView.image = image 37 }) 38 }) 39 } 40 41 override func didReceiveMemoryWarning() { 42 super.didReceiveMemoryWarning() 43 // Dispose of any resources that can be recreated. 44 } 45 }