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<UITouch>, 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 在接收的控制器里设置传值控制器闭包的方法,接收值。