1. 声明一个可为空的闭包 (() ->Void)? 表示没有参数 如果需要参数 ((_ x :String ) ->Void)?
var doSomethingHandle : (() ->Void)?
2.初始化闭包,相当于OC 中的实现闭包
self.doSomethingHandle = {()-> Void in
print("diaoyongbihaa")
}
3.调用闭包
// 这里不加判断 假如doSomethingHandle 为nil 也就是没有初始化,相当于OC block 没有实现。使用 !强制解包 会导致崩溃 : fatal error: unexpectedly found nil while unwrapping an Optional value, 在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法。
if self.doSomethingHandle != nil{
self.doSomethingHandle!()
}
以上为个人理解内容。有不对的地方 多多指教。
OC 版本
1.声明一个block
/*
* void 返回值
* 声明一个 blcok 属性 为 doSomethingHandle
* () 参数 这里是没有参数 如果有 void(^doSomethingHandle)(NSString *str)
*/
@property (copy, nonatomic) void(^doSomethingHandle)()
2.实现block
self.doSomethingHandle = ^ (){
};
3.调用block
if (self.doSomethingHandle) {
self.doSomethingHandle();
}
对比下 switf的闭包 与oc 的block 只是语法有改变,但是方式都一样,1.声明闭包,2,实现闭包,3 调用。。。。
网友评论