swift闭包和OC block类型的使用
之前看过一段swift,一直不知道OC中的block,即swift中的闭包是怎么实现的。今天就在网上搜索了一下,同时对比了一下OC中block类型的实现方法,然后写了一个Demo测试一下。
使用说明:
swift版本
1.声明类型typealiashideShowView=(Int)->Void
2.声明属性varmuFunc:hideShowView?
3.传递参数funcdidSelectedToHideView(hideFunc:@escaping(Int)->Void){muFunc=hideFunc}
4.监听值的变化functapEvent(){muFunc!(0)}
5.使用showView.didSelectedToHideView{(para)inNSLog("%d",para)}
6.Void是返回值类型,Int是参数类型,hideShowView是闭包的类型名称.第5项中的para是闭包的参数名,经测试,这个参数名在使用闭包的时候可以任意修改
OC版本
.h文件
//声明一个block类型 typedefvoid(^HideShowViewBlock)(intindex); //声明一个block属性 @property(nonatomic,copy)HideShowViewBlockhideViewBlock; //传递参数的方法 -(void)didHideShowViewWithBlock:(HideShowViewBlock)hideViewBlock;
.m文件
//实现传递参数的函数
-(void)didHideShowViewWithBlock:(HideShowViewBlock)hideViewBlock
{
self.hideViewBlock=hideViewBlock;
}
//监听需要传递值的变化
-(void)tapEvent
{
self.hideViewBlock(0);
}
swift闭包Demo的代码
classShowView:UIView
{
typealiashideShowView=(Int)->Void
varmuFunc:hideShowView?
privatevarviewFram:CGRect?
overrideinit(frame:CGRect)
{
super.init(frame:frame)
self.viewFram=frame
self.backgroundColor=UIColor.gray
self.createUI()
}
funccreateUI()
{
varcenterLabel=UILabel.init(frame:CGRect.init(x:0,y:0,width:(self.viewFram?.width)!,height:20))
centerLabel.center=self.center
centerLabel.text="测试"
centerLabel.textColor=UIColor.white
centerLabel.textAlignment=NSTextAlignment.center
centerLabel.font=UIFont.boldSystemFont(ofSize:16.0)
self.addSubview(centerLabel)
lettap=UITapGestureRecognizer.init(target:self,action:#selector(ShowView.tapEvent))
tap.cancelsTouchesInView=false
self.addGestureRecognizer(tap)
}
functapEvent()
{
muFunc!(0)
}
funcdidSelectedToHideView(hideFunc:@escaping(Int)->Void)
{
muFunc=hideFunc
}
requiredinit?(coderaDecoder:NSCoder){
fatalError("init(coder:)hasnotbeenimplemented")
}
}
classViewController:UIViewController
{
letWIDTH=UIScreen.main.bounds.size.width
letHEIGHT=UIScreen.main.bounds.size.height
overridefuncviewDidLoad()
{
super.viewDidLoad()
}
@IBActionfuncselectedToDoSomething(_sender:UIButton)
{
letshowView=ShowView.init(frame:CGRect.init(x:0,y:0,width:WIDTH/2,height:WIDTH/2))
showView.center=self.view.center
showView.didSelectedToHideView{(para)in
NSLog("%d",para)
}
self.view.addSubview(showView)
}
overridefuncdidReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
//Disposeofanyresourcesthatcanberecreated.
}
}
总结
以上所述是小编给大家介绍的swift闭包和OCblock类型的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!