swift闭包传值-小demo

最近开始学习swift,今天学到闭包,来分享一个用闭包从后一个页面往前一个页面传值的小demo,其中包含了懒加载的使用,方便以后复习。

首先在 AppDelegate.swift 中给控制器添加导航栏

//
//  AppDelegate.swift
//  Swift02-2
//
//  Created by 奇二世界 on 16/6/13.
//  Copyright © 2016年 YMN. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
   
        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()
        //定义一个视图控制器
        let vc = ViewController()
        //创建导航控制器
        let naVC = UINavigationController(rootViewController: vc)
        //设置根视图
        self.window?.rootViewController = naVC

        // Override point for customization after application launch.
        return true
    }

接下来在ViewController中添加button和label;
button 和 label 是用 swift 的懒加载实现;
注意闭包传值的步骤哦。

//
//  ViewController.swift
//  Swift02-2
//
//  Created by 奇二世界 on 16/6/13.
//  Copyright © 2016年 YMN. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    /*
    懒加载格式:
    lazy var 变量名:变量类型 = {
        let 名字 = 变量类型()
        return 名字
    }()
    */
    
    // 懒加载按钮
    lazy var btn:UIButton = {
        let btn = UIButton(frame: CGRectMake(150, 200, 50, 50))
        // btn.backgroundColor = UIColor.redColor()
        btn .setTitle("跳转", forState: UIControlState.Normal) 
        btn.addTarget(self, action: "btnAction:", forControlEvents: UIControlEvents.TouchUpInside)   
        return btn
    }()
    
    // 懒加载label
    lazy var lab:UILabel = {
        let lab = UILabel(frame: CGRectMake(100, 100, 150, 30))
        lab.backgroundColor = UIColor.greenColor()
        return lab
    }()

    // viewDidLoad中添加控件
     override func viewDidLoad() {
          super.viewDidLoad()
         // 添加btn / label 
          view.addSubview(btn)
          view.addSubview(lab)
    }
    
    // 实现btn点击方法
    func btnAction(btn:UIButton){
        print("点击btn")
        let secVC = SecondViewController()
    
        // 闭包传值-3.实现闭包方法,并执行闭包
        secVC.closure = {
            (str:String) -> ()
            in
            self.lab.text = str
        }
        navigationController?.pushViewController(secVC, animated: true)
    }
}

创建一个控制器 SecondViewController 继承自UIViewController进行跳转,在这个控制器中添加textField、button进行从后往前的传值

//
//  SecondViewController.swift
//  Swift02-2
//
//  Created by 奇二世界 on 16/6/13.
//  Copyright © 2016年 YMN. All rights reserved.
//

import UIKit

class SecondViewController: UIViewController {

    // 闭包传值-1.声明闭包方法
    var closure:((str:String) -> ())?
    
    // 懒加载textField
    lazy var tf:(UITextField) = 
    {
        var tf = UITextField(frame: CGRectMake(100, 100, 100, 30))
        tf.backgroundColor = UIColor.cyanColor()
        return tf
    }()
    
    // 懒加载btn
    lazy var btn:UIButton = {
        let btn = UIButton(frame: CGRectMake(100, 200, 50, 50))
        btn.backgroundColor = UIColor.redColor()
        btn .setTitle("传值", forState: UIControlState.Normal) 
        btn.addTarget(self, action: "btnAction:", forControlEvents: UIControlEvents.TouchUpInside)        
        return btn
    }()
    
// viewDidLoad中添加 btn 和 textField
 override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.whiteColor()
        view.addSubview(tf)
        view.addSubview(btn)
    }

    // 实现btn点击方法
    func btnAction(btn:UIButton){
        //  闭包传值-2.调用闭包传值
        closure!(str: tf.text!)

        navigationController?.popViewControllerAnimated(true)
    }
}

你可能感兴趣的:(swift闭包传值-小demo)