正所谓一法通,万法皆通,具体什么意思,你们自己领悟吧。
闭包我想不用多介绍了吧,学过OC的都应该知道,其功能和OC里的Block一样,和通知,在功能上也有相同之处。
先看个界面效果图,用通知也能做出来。我在上面一篇将通知的,也是写的这个功能。
//
// ViewController.swift
// Swift闭包的用法
//
// Created by mac on 16/2/5.
// Copyright © 2016年 ZY. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textF: UITextField!
@IBOutlet weak var pushButtonAction: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
pushButtonAction.addTarget(self, action:"pushButtonAction1:", forControlEvents: UIControlEvents.TouchUpInside);
}
func pushButtonAction1(btn:UIButton){
let viewC = SeconViewController(nibName:"SeconViewController",bundle: nil) as SeconViewController;
// 参数回调
viewC.textback { (text) -> Void in
self.textF.text = text as String;
};
self.presentViewController(viewC, animated: true, completion: { () -> Void in
});
// let a = 25;
// print("\(a)");
}
}
//
// SeconViewController.swift
// Swift闭包的用法
//
// Created by mac on 16/2/5.
// Copyright © 2016年 ZY. All rights reserved.
//
import UIKit
class SeconViewController: UIViewController {
@IBOutlet weak var textF: UITextField!
@IBOutlet weak var button: UIButton!
typealias newFuncy = (text : NSString) -> Void;
var _myFuncy = newFuncy?();
override func viewDidLoad() {
super.viewDidLoad()
button.addTarget(self, action:"pushButtonAction1:", forControlEvents: UIControlEvents.TouchUpInside);
}
// 闭包值的传递方法
func textback(mathFunction:(text : NSString) -> Void){
_myFuncy = mathFunction;
}
func pushButtonAction1(btn:UIButton){
if((_myFuncy) != nil){
// 调用闭包
_myFuncy!(text: textF.text!);
}
self.dismissViewControllerAnimated(true) { () -> Void in
};
}
//扩展方面
// 闭包的另类用法,用于接口调用
func dataBack(str:String , mathFunction:(text:String) -> Void){
print("\(str)");
let newText = "erwdd";
mathFunction(text: newText);
}
// 类方法
class func ushButtonAc(){
}
}