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 在接收的控制器裏設置傳值控制器閉包的方法,接收值。