• Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值


    一、第一个界面

    //  Created by 秦志伟 on 14-6-13.
    import UIKit
    
    class ZWRootViewController: UIViewController {
    
      init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        // Custom initialization
      }
      var myLabel:UILabel?
      override func viewDidLoad() {
        super.viewDidLoad()
        
        var item = UIBarButtonItem(title:"下一页",style:UIBarButtonItemStyle.Plain,target:self,action:"nextBtnClicked")
        self.navigationItem.rightBarButtonItem = item
        
        
        myLabel = UILabel(frame:CGRectMake(0,100,320,50))
        myLabel!.text = "Closure"
        myLabel!.textAlignment = NSTextAlignment.Center
        self.view.addSubview(myLabel!)
        // Do any additional setup after loading the view.
      }
      func someFunctionThatTakesAClosure(string:String) -> Void {
        // function body goes here
        myLabel!.text = string
      }
      func nextBtnClicked(){
        let second = ZWSecondViewController(nibName:nil,bundle:nil)
        //将当前someFunctionThatTakesAClosure函数指针传到第二个界面,第二个界面的闭包拿到该函数指针后会进行回调该函数
        second.initWithClosure(someFunctionThatTakesAClosure)
        self.navigationController.pushViewController(second,animated:true)
        
      }
      
      override func viewWillDisappear(animated: Bool){
        myLabel!.hidden = true
      }
      override func viewWillAppear(animated: Bool){
        myLabel!.hidden = false
      }
      override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
      }
      
    
      /*
      // #pragma mark - Navigation
    
      // In a storyboard-based application, you will often want to do a little preparation before navigation
      override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
      }
      */
    
    }

    二、第二个界面

    //  Created by 秦志伟 on 14-6-13.
    import UIKit
    //类似于OC中的typedef
    typealias sendValueClosure=(string:String)->Void
    class ZWSecondViewController: UIViewController {
      var i:Int?
      //声明一个闭包
      var myClosure:sendValueClosure?
      //下面这个方法需要传入上个界面的someFunctionThatTakesAClosure函数指针
      func initWithClosure(closure:sendValueClosure?){
        //将函数指针赋值给myClosure闭包,该闭包中涵盖了someFunctionThatTakesAClosure函数中的局部变量等的引用
        myClosure = closure
      }
      
      init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        
        // Custom initialization
      }
    
      override func viewDidLoad() {
        super.viewDidLoad()
        i = 0
        var btn = UIButton.buttonWithType(UIButtonType.System) as?UIButton
        btn!.frame = CGRectMake(0,100,320,50)
        btn!.setTitle("点击我" ,forState:UIControlState.Normal)
        btn!.addTarget(self,action:"action", forControlEvents:UIControlEvents.TouchUpInside)
        self.view.addSubview(btn)
        
        // Do any additional setup after loading the view.
      }
      func action(){
        i = i!+1
        //判空
        if myClosure{
          //闭包隐式调用someFunctionThatTakesAClosure函数:回调。
          myClosure!(string: "好好哦(i)")
        }
      }
      override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
      }
      
    
      /*
      // #pragma mark - Navigation
    
      // In a storyboard-based application, you will often want to do a little preparation before navigation
      override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
      }
      */
    
    }
  • 相关阅读:
    Taobao File System
    poj 1860 (Bellman_Ford判断正环)
    IOS研究院之打开照相机与本地相册选择图片
    mysql中timestamp,datetime,int类型的区别与优劣
    数学之路(3)-机器学习(3)-机器学习算法-贝叶斯定理(3)
    POJ 3740 DLX
    HDU4738【杭州网赛、判桥】
    umdh工具使用
    计算机组成与设计(八)—— 单周期处理器
    计算机组成与设计(七)—— 除法器
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4995739.html
Copyright © 2020-2023  润新知