swift闭包和OC block类型的使用

 更新时间:2017年08月11日 09:39:02   投稿:mrr  
这篇文章主要介绍了swift闭包和OC block类型的使用,需要的朋友可以参考下

之前看过一段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类型的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Swift 3.0基础学习之扩展

    Swift 3.0基础学习之扩展

    扩展是向一个已有的类、结构体或枚举类型添加新的功能(在swift中扩展没有名字)。相当于Objective-C中Category(OC中可以有名字的,而且只能扩展类)。这篇文章主要介绍了Swift 3.0基础学习之扩展的相关资料,需要的朋友可以参考下。
    2017-03-03
  • 浅谈swift 4.0中private所发生的变化

    浅谈swift 4.0中private所发生的变化

    Swift 4是苹果计划于2017年秋季推出的最新版本,其主要重点是提供与Swift 3代码的源兼容性,并努力实现ABI稳定性。下面这篇文章主要给大家介绍了关于swift 4.0中private所发生的一些变化,需要的朋友可以参考下。
    2017-12-12
  • Swift reduce函数使用示例详解

    Swift reduce函数使用示例详解

    这篇文章主要为大家介绍了Swift reduce函数使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Swift 3.0将UILabel数字颜色设置为红色的方法

    Swift 3.0将UILabel数字颜色设置为红色的方法

    这篇文章主要介绍了关于在Swift中将UILabel数字颜色设置为红色的方法,文中给出了详细的示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 在Swift中使用Cocoa的现有设计模式介绍

    在Swift中使用Cocoa的现有设计模式介绍

    这篇文章主要介绍了在Swift中使用Cocoa的现有设计模式介绍,Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之一,需要的朋友可以参考下
    2014-07-07
  • 判断 ScrollView List 是否正在滚动详解

    判断 ScrollView List 是否正在滚动详解

    这篇文章主要为大家介绍了判断 ScrollView、List 是否正在滚动示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Swift面试题及答案整理

    Swift面试题及答案整理

    虽然Swift出现的时间不久,但是它已经成为最流行的编程语言之一了。Swift的知识浩如烟海,但是怎么测试你掌握了多少?通过下面这篇整理关于Swift面试题及答案,可能会对你所掌握的Swift进行一个判断,需要的朋友可以参考借鉴。
    2017-01-01
  • 深入解析Swift语言中的协议

    深入解析Swift语言中的协议

    这篇文章主要介绍了深入解析Swift语言中的协议,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • swift 可选型的使用详解

    swift 可选型的使用详解

    可选性是Swift提供的一个特殊类型,它为我们编写程序提供便利的条件。这篇文章主要介绍了swift 可选型的使用详解,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Swift中风味各异的类型擦除实例详解

    Swift中风味各异的类型擦除实例详解

    你也许曾听过类型擦除,甚至也使用过标准库提供的类型擦除类型如 AnySequence,下面这篇文章主要给大家介绍了关于Swift中风味各异的类型擦除的相关资料,需要的朋友可以参考下
    2022-04-04

最新评论