您的位置:首页 > 移动开发 > Swift

Swift 视图控制器间传值(正向和反向)

2018-01-06 10:40 232 查看
一、视图控制器间正向传值

1、正向传值有两种方式:第一种是通过属性传值,第二种是通过构造方法传值

2、通过属性传值:

let vc = ViewController()

        vc.data = "通过dada属性传值"

        self.present(vc, animated:true, completion:nil)
3、通过构造方法传值

// 在ViewController控制器中实现构造方法如下

init(data:String) {

        self.data = data

        super.init(nibName:nil, bundle:nil)

    }

// 在要调用的地方调用ViewController控制器的构造方法实现数据传递

let vc = ViewController(data: "通过构造方法传值")

self.present(vc, animated: true,
completion: nil)

二、视图控制器间反向传值 (VC_1 向 VC_2传值为正向,VC_2 向 VC_1传值为反向)

1、控制器间反向传值要复杂一些,通常使用协议或者闭包完成

2、通过协议实现反向传值

// 在控制器VC_2中声明协议以及协议方法

protocol ViewControllerProtocol {

    func sentData(data:
String)

}

// 控制器VC_2

class ViewController:
UIViewController {

// 声明一个Optional类型的代理属性

    var delegate :ViewControllerProtocol?

}

// 在控制器VC_2需要反向传值的地方调用该方法进行协议传值,会在VC_1中的sentData方法中接受到此值

delegate?.sentData(data:"反向传值")

// 在控制器VC_1中遵守协议

class HomeVC:
UIViewController, ViewControllerProtocol

// 在控制器VC_1中需要跳转到VC_2的地方指定代理

let vc =ViewController()

vc.delegate =self

self.present(vc, animated:true, completion:nil)

// 在VC_1中实现协议方法

func sentData(data:
String) {

        // data 即为VC_1反向传递过来的值

}

3、通过闭包实现反向传值

// 在控制器VC_2中声明一个Optional值类型的闭包

var closure : ((String) ->Void)?

// 在控制器VC_2需要反向传值的地方调用此方法

self.closure!("反向传值")

// 在控制器VC_1中实现跳转到VC_2的方法,并实现反向传值的闭包,当VC_2需要跳转到VC_1并传值时,只需调用控制器VC_2中反向传值的方法即可

let vc = ViewController()

vc.closure = { (data:
String) in

       // data即为反向传过来的值

}

self.present(vc, animated: true,
completion: nil)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐