在OC中叫block,在swift中叫闭包。。
使用一个图片下载的案例来说明下闭包的使用
import UIKit
//定义闭包
typealias SuccessBlock = ( imageDownload : ImageDownLoad,image: UIImage) ->Void
typealias ErrorBlock = (imageDownload : ImageDownLoad,error: NSError)->Void
class ImageDownLoad: NSObject {
// 在类里面声明属性成功和失败案例
var successBlock : SuccessBlock?
var errorBlock : ErrorBlock?
var reveiceData = NSMutableData()
let urlStr :String
init(str :String)
{
self.urlStr = str;
super.init()
let url = NSURL.init(string: str);
print(url);
let request = NSURLRequest(URL: url!);
let connect = NSURLConnection.init(request: request, delegate: self);
connect! .start();
}
// 实现的两个方法
func MySuccessClosure(successMyBlock:SuccessBlock) -> Void {
successBlock = successMyBlock;
}
func MyErrorClosure(errorMyBlock :ErrorBlock) -> Void {
errorBlock = errorMyBlock;
}
// 在connection的代理里面传值
func connection(connection: NSURLConnection, didFailWithError error: NSError){
errorBlock!(imageDownload:self,error:error);
}
func connection(connection: NSURLConnection, didReceiveData data: NSData)
{
reveiceData.appendData(data);
}
func connectionDidFinishLoading(connection: NSURLConnection)
{
let image = UIImage.init(data: reveiceData);
successBlock!(imageDownload: self,image: image!);
}
}
本文介绍了Swift中的闭包(在Objective-C中称为Block),通过一个图片下载的实例详细阐述了如何创建和使用闭包。首先定义了SuccessBlock和ErrorBlock类型别名,分别对应下载成功的回调和错误的回调。接着在ImageDownLoad类中声明了相关属性,并实现了成功和失败的闭包设置方法。在NSURLConnection的代理方法中,实现了传递值给闭包的功能,以便在图片下载完成后调用成功或错误回调。
1万+

被折叠的 条评论
为什么被折叠?



