美文网首页
Swift 代理传值方式

Swift 代理传值方式

作者: 真爱要有你才完美 | 来源:发表于2017-05-22 16:05 被阅读37次

协议传值

协议传值,主要用于代理模式。假设我们要实现从详情界面传值到主界面这一需求,首先,我们需要拟定一份协议,为了方便,我们可直接在详情界面中拟定协议,如下所示:

importUIKit//1、声明协议@objcprotocol DetailViewControllerDelegate {    optional func viewController(viewController: DetailViewController, dismissWithValue value: String)->Void}

@objc关键字标识该协议为一个可选协议;optional关键字标识该协议方法对于协议的遵守者而言不是必须实现的。

声明了协议之后,我们需要为详情界面声明一个代理属性,如下所示:

classDetailViewController:UIViewController{// 2、声明协议属性weakvardelegate: DetailViewControllerDelegate?overridefunc viewDidLoad() {    }}

代理属性delegate值为实现了DetailViewControllerDelegate协议的任意对象,weak关键字主要为了防止循环引用导致对象无法释放。

声明了代理属性之后,我们需要在处理界面跳转(返回)的方法中处理协议传值的逻辑了。首先我们需要判断代理人是否存在,可通过可选绑定来操作,如果代理存在,则让代理执行协议方法,并且将需要传递的信息通过参数传递给代理所在的界面,如下所示:

// MARK:- Events -func respondsToBtn(sender:UIButton) {// 3、判断代理是否存在,如果代理存在则让代理执行协议方法并且将数据传递给代理iflet delegate =self.delegate{        delegate.viewController!(self, dismissWithValue:"123")    }self.dismissViewControllerAnimated(true, completion:nil)}

现在万事具备,只缺“代理”了,切换到主界面中,在处理界面跳转的方法中,我们将详情界面的代理属性设为主界面,如下所示:

// MARK:- Events -func respondsToBtn(sender:UIButton) {    let detail_vc = DetailViewController()// 设置代理detail_vc.delegate=selfself.presentViewController(detail_vc, animated:true, completion:nil)}

然后,实现协议方法,在协议方法中,我们可以直接获取从详情界面传递过来的value值。

// MARK:- DetailViewControllerDelegate -func viewController(viewController: DetailViewController, dismissWithValuevalue: String) {    print(value)}

相关文章

  • OC与swift的数据传输

    简介 该项目主要介绍了oc与swift之间、swift内部几种常见的传值方式(属性传值、代码块传值、代理传值、通知...

  • iOS之传值

    在iOS中传值的方式有很多种方式,有最普遍的就是属性传值,代理传值,block传值等方式了。写了OC和swift的...

  • swift传值

    本文将介绍swift中的传值方式:属性传值、代理传值、闭包传值、通知传值本文将在两个VC之间进行传值:HomeVC...

  • Swift 代理传值方式

    协议传值 协议传值,主要用于代理模式。假设我们要实现从详情界面传值到主界面这一需求,首先,我们需要拟定一份协议,为...

  • Swift界面传值

    Swift中界面传值的方法 主要有三种 1.代理传值2.闭包传值(即OC中的Block) 属性传值 代理传值 F...

  • Swift 3.0 闭包使用及示例(附带Get、Post请求方法

    在swift中,实现回调传值常用的有三种方式: 闭包 closure 代理 delegate 通知 NSNotif...

  • OC、swift混编中的反向传值

    一 OC向swift传值 1) 代理 1.1在oc中创建 代理 #import @protocolSecon...

  • iOS-传值方式

    传值方式:1、属性传值 方法传值2、代理传值3、单例传值 4、通知传值 NSNotificationCente...

  • iOS中界面传值的几种方式

    1.属性传值 属性传值适用于顺序传值,从前面的界面传值给后面的界面。 2.代理传值 用代理的方式实现界面间传值稍微...

  • swift 代理传值

    场景:A页面跳转到B页面,B页面返回到A页面,(B页面给A页面传值) B页面逻辑:创建协议,声明变量,传值 A页面...

网友评论

      本文标题:Swift 代理传值方式

      本文链接:https://www.haomeiwen.com/subject/quxixxtx.html