美文网首页iOS学习程序员小知识点
Swift闭包和OC block类型的使用

Swift闭包和OC block类型的使用

作者: ZYiDa | 来源:发表于2017-08-10 15:37 被阅读555次

    之前看过一段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类型的使用

        本文链接:https://www.haomeiwen.com/subject/cuyhrxtx.html