Swift—闭包、代理实现反向传值(附具体代码)

文章介绍了在iOS应用开发中,如何在ViewControllerA和ViewControllerB之间实现反向传值,主要讨论了使用闭包和代理两种方式。闭包实现包括在ViewControllerB中定义和调用,然后在ViewControllerA中实现接收。代理方式则涉及定义协议、设置代理并在两个ViewController中实现相关方法。
摘要由CSDN通过智能技术生成

在iOS开发过程中,我们经常会有这样的一个需求,假设有两个界面:ViewControllerA、ViewControllerB,我们从ViewControllerA进入到ViewControllerB,想把ViewControllerB中的值传回ViewControllerA(反向传值问题),下面介绍闭包和代理两种方法来处理.

这两种方法其实实现的思路是非常类似的,大致分为三个过程:定义、调用、实现.代理传值多一个设置代理的步骤.

闭包传值:

        定义:从哪个界面传值,就在哪个界面定义,本案例中是ViewControllerB.

        调用:从哪个界面传值,就在哪个界面调用,本案例中是ViewControllerB.

        实现:想传递到哪个界面,就在哪个界面实现,本案例中是ViewControllerA.

下面是具体实现代码:

        ViewControllerA:

import UIKit
class ViewControllerA: UIViewController{
    override func viewDidLoad() {
        self.view.backgroundColor = .white
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let viewB = ViewControllerB()
        self.present(viewB,animated: true)
        //闭包实现
        viewB.closure = { age,sentense in
            print("\(age)------\(sentense)")
        }
    }
}

        ViewControllerB:

import UIKit
class ViewControllerB :UIViewController{
    //闭包定义
    var closure:((Int,String)->())?
    override func viewDidLoad() {
        self.view.backgroundColor = .brown
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        //闭包调用
        closure!(1314,"Hyx Love Hxy")
        self.dismiss(animated: true)
    }
}

代理传值:

         ViewControllerA:        

import UIKit
class ViewControllerB :UIViewController{
    //代理定义
    var delegate:Transmit?
    override func viewDidLoad() {
        self.view.backgroundColor = .brown
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        //代理调用
        delegate?.transmitData(year: 1314, sentense: "Hyx Love Hxy")
        self.dismiss(animated: true)
    }
}
//协议
protocol Transmit{
    func transmitData(year:Int,sentense:String)
}

        ViewcontrollerB:

import UIKit
class ViewControllerB :UIViewController{
    //代理定义
    var delegate:Transmit?
    override func viewDidLoad() {
        self.view.backgroundColor = .brown
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        //代理调用
        delegate?.transmitData(year: 1314, sentense: "Hyx Love Hxy")
        self.dismiss(animated: true)
    }
}
//协议
protocol Transmit{
    func transmitData(year:Int,sentense:String)
}

以上就是两种实现反向传值的方法,不仅可以用来传值,还可以用来回调一些方法,进行业务逻辑处理和数据处理. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值