之前看过一段swift,一直不知道OC中的block,即swift中的闭包是怎么实现的。今天就在网上搜索了一下,同时对比了一下OC中block类型的实现方法,然后写了一个Demo测试一下。
使用说明:
swift版本
1.声明类型 typealias hideShowView = (Int) -> Void
2.声明属性 var muFunc:hideShowView?
3.传递参数 func didSelectedToHideView(hideFunc:@escaping (Int)->Void) { muFunc = hideFunc }
4.监听值的变化 func tapEvent() { muFunc!(0) }
5.使用 showView.didSelectedToHideView { (para) in NSLog("%d", para) }
6.Void 是返回值类型,Int是参数类型,hideShowView是闭包的类型名称.第5项中的para是闭包的参数名,经测试,这个参数名在使用闭包的时候可以任意修改
OC版本
.h文件
//声明一个block类型
typedef void(^HideShowViewBlock)(int index);
//声明一个block属性
@property (nonatomic,copy) HideShowViewBlock hideViewBlock;
//传递参数的方法
- (void)didHideShowViewWithBlock:(HideShowViewBlock)hideViewBlock;
.m文件
//实现传递参数的函数
- (void)didHideShowViewWithBlock:(HideShowViewBlock)hideViewBlock
{
self.hideViewBlock = hideViewBlock;
}
//监听需要传递值的变化
- (void)tapEvent
{
self.hideViewBlock(0);
}
swift 闭包 Demo的代码
class ShowView: UIView
{
typealias hideShowView = (Int) -> Void
var muFunc:hideShowView?
private var viewFram:CGRect?
override init(frame:CGRect )
{
super.init(frame: frame)
self.viewFram = frame
self.backgroundColor = UIColor.gray
self.createUI()
}
func createUI()
{
var centerLabel = 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)
let tap = UITapGestureRecognizer.init(target: self, action: #selector(ShowView.tapEvent))
tap.cancelsTouchesInView = false
self.addGestureRecognizer(tap)
}
func tapEvent()
{
muFunc!(0)
}
func didSelectedToHideView(hideFunc:@escaping (Int)->Void)
{
muFunc = hideFunc
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class ViewController: UIViewController
{
let WIDTH = UIScreen.main.bounds.size.width
let HEIGHT = UIScreen.main.bounds.size.height
override func viewDidLoad()
{
super.viewDidLoad()
}
@IBAction func selectedToDoSomething(_ sender: UIButton)
{
let showView = 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)
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
总结
以上所述是小编给大家介绍的swift闭包和OC block类型的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对html5模板网网站的支持!
RxSwift学习教程之类型对象Subject详解这篇文章主要给大家介绍了关于RxSwift学习教程之类型对象Subject的相关资料,文中通过示例代码介绍的非常详细,对大
RxSwift学习之Observable的新建、订阅及取消订阅这篇文章主要给大家介绍了关于RxSwift学习教程之Observable的相关资料,文中详细的给大家介绍了关于新建Observable、订
RxSwift学习教程之基础篇RxSwift是Swift函数响应式编程的一个开源库,由Github的ReactiveX组织开发,维护。下面这篇文章主要给大家介绍了关于R
Swift4.0 Array数组详解这篇文章主要为大家详细介绍了Swift4.0 Array数组的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
利用Swift实现各类的CATransition动画详解CATransition动画主要在过渡时使用,比如两个页面层级改变的时候添加一个转场效果。CATransition分为两类,一类是公开
利用Swift如何判断iPhone X机型详解近日,iPhone X的发布在人们群众引起了很大的轰动,下面这篇文章主要给大家介绍了关于利用Swift如何判断iPhone X机型