发布于 2015-12-29 10:48:41 | 110 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Swift教程,程序狗速度看过来!

Swift编程语言

SWIFT,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。


一、同步异步两个概念
 
  简单来讲,同步就是函数或者闭包(objective c中的block)执行完毕才能返回。异步是立刻返回,然后异步执行的动作结束后,再进行回调。
 
二、同步下载
同步下载:
 
 
class func sendSynchronousRequest(_ request: NSURLRequest,  
returningResponse response:AutoreleasingUnsafeMutablePointer<NSURLresponse>  
error error:NSErrorPointer)->NSdata?  
参数:
request  要请求的URLRequest
reponse  回调参数,服务器返回的URL response
error 回调参数,判断是否有错误产生
以下以下载一张图片为例
可以发现,在view出现的时候,照片已经存在了,但是view载入较慢,因为要等待同步下载完成
完整的代码:
 
 
class ViewController: UIViewController{  
    var imageview = UIImageView(frame: CGRectMake(40,40,200,200))  
    override func viewDidLoad(){  
        super.viewDidLoad()  
        imageview.contentMode = UIViewContentMode.ScaleAspectFit  
        self.view.addSubview(imageview)  
        let url = "http://f.hiphotos.baidu.com/image/pic/item/e1fe9925bc315c60191d32308fb1cb1348547760.jpg"  
        let imageURL = NSURL(string:url)  
        let urlRequest = NSURLRequest(URL: imageURL!)  
        var response:NSURLResponse?  
        var error:NSError?  
        var data = NSURLConnection.sendSynchronousRequest(urlRequest,returningResponse:&response,error:&error) as NSData?  
        if error == nil && data?.length > 0{  
            var image:UIImage = UIImage(data:data!)!  
            imageview.image = image  
        }  
    }  
    override func didReceiveMemoryWarning(){  
        super.didReceiveMemoryWarning()  
    }  
}  
 
三、异步下载
 
class func sendAsynchronousRequest(_ request: NSURLRequest,  
    queue:NSOperationQueue!  
    completionHandler handler:(NSURLResponse!,NSData!,NSError!))->Void  
参数:
request  要请求的URLRequest
queue 当请求完成或者出错的时候,闭包在这个队列上执行,更改UI要在主线程上执行
handler  当请求完成或者出错的时候,执行的闭包
闭包的几个参数
reponse  回调参数,服务器返回的URL response
error 回调参数,判断是否有错误产生
NSData  下载到的数据
同样以一张图片为例
可以发现,view立刻载入,但是图片不会立刻出现,等到图片下载完了,UI会更新。可以看到,异步下载不会阻塞UI,造成用户体验不好。
完整的代码
 
 
class ViewController: UIViewController{  
    var imageview = UIImageView(frame: CGRectMake(40,40,200,200))  
    override func viewDidLoad(){  
    super.viewDidLoad()  
    imageview.contentMode = UIViewContentMode.ScaleAspectFit  
    self.view.addSubview(imageview)  
    let url = "http://f.hiphotos.baidu.com/image/pic/item/e1fe9925bc315c60191d32308fb1cb1348547760.jpg"  
    let imageURL = NSURL(string:url)  
    let urlRequest = NSURLRequest(URL: imageURL!)  
    NSURLConnection.sendAsynchronousRequest(urlRequest,queue:NSOperationQueue.mainQueue(),completionHandler:{  
        (response: NSURLResponse!,data:NSData!,error:NSError!)-> Void in  
        if error == nil && data?.length > 0{  
            var image:UIImage = UIImage(data:data!)!  
            self.imageview.image = image  
       }  
     })  
    }  
    override func didReceiveMemoryWarning(){  
        super.didReceiveMemoryWarning()  
    }  
}  
下载的图片原图



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务