Swift 闭包(Closure)回调传值

Swift 闭包(Closure)回调传值,第1张

概述实现例子由两个界面组成 A - > B 使用属性传值 B - > A 使用闭包进行反向回调传值 Swift 使用闭包(Closure)传值的原理,与OC 中使用代码块(block)传值原理,基本类似 按步骤可以如下理解: 1、定义闭包。 2、闭包赋值(传送) 3、闭包调用。 至于定义闭包应该在哪个页面定义? 想对于当前界面上执行某个 *** 作,就在当前界面上定义, 比如:我想给通过 B 界面回调 给 A

实现例子由两个界面组成
A - > B 使用属性传值
B - > A 使用闭包进行反向回调传值

Swift 使用闭包(Closure)传值的原理,与OC 中使用代码块(block)传值原理,基本类似

按步骤可以如下理解:
1、定义闭包。
2、闭包赋值(传送)
3、闭包调用。

至于定义闭包应该在哪个页面定义?

想对于当前界面上执行某个 *** 作,就在当前界面上定义,
比如:我想给通过 B 界面回调 给 A 界面上的文本框赋值,赋值 *** 作是在 A 界面上执行的、那么闭包就应该定义在 A 界面上。既然定义在 A ,那么 B 界面就是调用闭包地方,。找准实现者,跟调用者,然后在调用者界面定义属性用于接收闭包即可;

实现代码:

一级界面 A :

import UIKitclass VIEwController: UIVIEwController {    var textLab:UILabel?    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        //创建一个文本显示lab        textLab = UILabel(frame:CGRectMake(80,50,120,40));        textLab?.backgroundcolor = UIcolor.yellowcolor();        textLab?.textAlignment = NSTextAlignment.Center;        self.vIEw.addSubvIEw(textLab!);        //创建一个按钮用于添加事件 A->B 属性传值        var nextBtn = UIbutton(frame: CGRectMake(80,40))        nextBtn.setTitle("下一页",forState: UIControlState.normal);        nextBtn.backgroundcolor = UIcolor.redcolor();        nextBtn.addTarget(self,action: "nextBtnAction",forControlEvents: UIControlEvents.touchUpInsIDe);        self.vIEw.addSubvIEw(nextBtn);    }    //定义一个带字符串参数的闭包    func myClosure(testStr:String)->VoID{        //给textLab 赋值        //这句话什么时候执行?,闭包类似于oc中的block或者可以理解成c语言中函数,只有当被调用的时候里面的内容才会执行        textLab?.text = testStr;    }    func nextBtnAction(){        //获取目标页面对象        var secondVC:SecondVIEwController = SecondVIEwController();        //属性赋值        secondVC.str = "属性传值"        //将闭包传递到二级界面,在二级界面中调用        secondVC.testClosure = myClosure;        //模态视图跳转        self .presentVIEwController(secondVC,animated: true,completion: nil);    }

二级界面 B :

import UIKit//类似于OC中的typedeftypealias sendValueClosure=(string:String)->VoIDclass SecondVIEwController: UIVIEwController {    var str:String?    //声明一个闭包    var testClosure:sendValueClosure?    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        //创建一个文本显示lab        var textLab = UILabel(frame:CGRectMake(80,40));        textLab.backgroundcolor = UIcolor.yellowcolor();        textLab.textAlignment = NSTextAlignment.Center;        //给文本框赋值,这个值来自上一个界面        textLab.text = str;        self.vIEw.addSubvIEw(textLab);        //创建一个按钮用于添加事件 B->A 闭包回调传值        var backBtn = UIbutton(frame: CGRectMake(80,40))        backBtn.setTitle("返回",forState: UIControlState.normal);        backBtn.backgroundcolor = UIcolor.redcolor();        backBtn.addTarget(self,action: "backBtnAction",forControlEvents: UIControlEvents.touchUpInsIDe);        self.vIEw.addSubvIEw(backBtn);    }    func backBtnAction(){        /** 先判断闭包是否存在,然后再调用 */        if (testClosure != nil){            testClosure!(string: "回调传值")        }        self .dismissVIEwControllerAnimated(true,completion: nil)    }
总结

以上是内存溢出为你收集整理的Swift 闭包(Closure)回调传值全部内容,希望文章能够帮你解决Swift 闭包(Closure)回调传值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存