在OC中,个人觉得block是很爽的,因为我是个很懒的人,能少写代码就少代码,想法设法的精简代码。
这样 block 和 protocol(协议)相比较,block最和我的胃口,
这样就不用再引入XXXDelegate,然后再self.delegate = self,再实现协议方法,用block阔以简单方便的取代协议。
然而swift却没有block,所以呢,我研究了一下swift里,闭包代替block的写法,
1> OC中的block:
@property (nonatomic, copy) void(^testClosure)(NSString *name);
2> swift里的闭包实现OC中的block类似的功能:
var testClosure:((name: String ) -> ())?
// 在对应的事件里的处理
if testClosure != nil{
testClosure!(name: "路过")
} //判断非空 再调用
说明: (( String ) -> ())?
其中的Sting 就是block里面 那个回传参数 NSString *string ,而 -> 后面那个() 就是block最前面那个void 这样,
二者比较一下,就清楚了。前提是,OC中block要会用,理解。
但是,在其他类调用的时候 要注意了,swift里,联想功能不够全面 ,所以呢,需要你手写补全
cell.testClosure = {(name) -> Void in
println(name) //= 号后面的东东 全是手动补全的
}
这一点也就是oc里面 调用block的另一种写法一样
(1) cell.testClosure = ^(NSString *name){
// = 号后面的东东 也全是手动补全的
};
(2)[cell setTestClosure:^(NSString *name){
// 这一种呢,swift里面是没有的
}];
swift里面利用闭包达到和OC里面block的效果
最新推荐文章于 2022-07-20 19:28:25 发布