闭包反向传值使用详解

FirstViewController的代码


import UIKit

classFirstViewController: UIViewController, SecondViewControllerDelegate {

@IBOutletweak var showTextLabel: UILabel!

@IBOutletweak var showDelegateTextLabel: UILabel!

overridefunc viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view.

}

//点击按钮跳转到SecondViewController

@IBActionfunc tapGoSecondViewController(sender: UIButton) {

//从storyboard上加载SecondViewController

let secondVC = UIStoryboard(name:"Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("secondViewController") as! SecondViewController

//实现回调,获取回调回来的值(闭包)

secondVC.backClosure = {

(backStr: String) -> Voidin

self.showTextLabel.text = backStr

}

secondVC.delegate =self

//跳转到SecondViewController

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

}

//MARK: - SecondViewControllerDelegate(代理)

func fetchBackString(str: String) {

self.showDelegateTextLabel.text = str

}

overridefunc didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

SecondViewController的代码


import UIKit

//定义闭包类型(特定的函数类型函数类型)

typealias InputClosureType = (String) -> Void

protocol SecondViewControllerDelegate: NSObjectProtocol{

func fetchBackString(str: String)

}

class SecondViewController: UIViewController {

@IBOutletweak var inputTextField: UITextField!

//接收上个页面传过来的闭包块

var backClosure: InputClosureType?

weak var delegate: SecondViewControllerDelegate?

overridefunc viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view.

}

@IBActionfunc tapBackButton(sender: UIButton) {

ifself.backClosure !=nil{

iflet tempString =self.inputTextField.text {

self.backClosure!(tempString)

}

}

self.navigationController?.popViewControllerAnimated(true)

}

@IBActionfunc delegateBackMethod(sender: UIButton) {

ifself.delegate !=nil{

iflet tempString =self.inputTextField.text {

delegate!.fetchBackString("代理返回数据:\(tempString)")

}

}

self.navigationController?.popViewControllerAnimated(true)

}

overridefunc didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容