正所谓一法通,万法皆通,具体什么意思,你们自己领悟吧。
闭包我想不用多介绍了吧,学过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(){ } }
原文:http://www.cnblogs.com/zxh-iOS/p/5185565.html