Swift 传值之闭包传值

Swift的闭包传值和OC中的block传值非常相似

项目的建立和之前的属性传值和代理传值类似 

属性传值:http://blog.csdn.net/zhangjitao_boke/article/details/50606185

代理传值:http://blog.csdn.net/zhangjitao_boke/article/details/50606707

闭包传值:http://blog.csdn.net/zhangjitao_boke/article/details/50607325

通知传值:http://blog.csdn.net/zhangjitao_boke/article/details/50607818

单例传值:http://blog.csdn.net/zhangjitao_boke/article/details/50608066

直接上代码

在FirstViewController中

//
// FirstViewController.swift
// BiBaoPassValue
//
// Created by JT on 16/1/29.
// Copyright © 2016年 JT. All rights reserved.
//

import UIKit

class FirstViewController: UIViewController {

@IBOutlet weak var firstTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
}

override func touchesBegan(touches: Set, withEvent event: UIEvent?) {
let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
let secondVC = storyBoard.instantiateViewControllerWithIdentifier("secondVC") as! SecondViewController
// 给secondVC的闭包实现方法
secondVC.passValue = { (text:String) -> Void in
// 闭包方法传过来值
self.firstTextField.text = text
}

self.navigationController?.pushViewController(secondVC, animated: true)
}
}

SecondViewController中实现代码

//
// SecondViewController.swift
// BiBaoPassValue
//
// Created by JT on 16/1/29.
// Copyright © 2016年 JT. All rights reserved.
//

import UIKit

// 定义一个闭包类型
typealias passValueClosure = (String) -> Void


class SecondViewController: UIViewController {

@IBOutlet weak var secondTextField: UITextField!
// 闭包变量
var passValue:passValueClosure?


override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: self, action: "backAction")
}

func backAction() {
// 如果闭包不为空
if passValue != nil {
self.passValue!(secondTextField.text!)
}

self.navigationController?.popViewControllerAnimated(true)
}

}

这样就能实现闭包传值了,闭包传值记住几点

1 声明闭包类型

2 在要传值的界面定义闭包变量

3 判断闭包变量是否为nil,如果不为nil的话,就执行闭包传值

4 在接收的控制器里设置传值控制器闭包的方法,接收值。

你可能感兴趣的:(swift,传值)