废话不多说,直接开始正文。
一、闭包回调
1.什么是闭包回调?
(1)通过定义闭包和调用闭包实现值在不同页面的传递。
2.为什么要用闭包回调?
(1)就是让一个视图中的值在另一个视图也能用。
(2)可以由自己来控制什么时候调用闭包,从而控制闭包中任务的执行。(调用才会执行)
3.闭包回调能做什么?
(1)假设有A——B两个页面,你想捅过点击B页面中TableView的Cell来让A中的Label显示你所点击的Cell中的文字,就可以用闭包回调来传递。你还可以设置在什么时候进行调用,从而控制进程。
4.怎么实现闭包回调?
如果要实现A ->B的一个传值
(1)在A页面中设置一个按钮,点击按钮就触发下面的函数,在函数里面设定接受传值的闭包。
@objc func coco1()-> Void{
let view2 = ViewController2()
view2.callBackClosure = { (str,name) in
print(str)
}
self.navigationController?.pushViewController(view2, animated: true)
}
在B界面中,你也需要设定一个按钮,来调用该闭包,当此闭包被调用的时候,在A页面闭包中的内容将会被执行。
(1)先定义一个闭包
typealias SwiftClosure = (String,String) -> Void
(2)继承这个闭包的属性(在class里面写)
var callBackClosure:SwiftClosure?
(3)设置调用(在class里面写)
@objc func coco1(){
if callBackClosure != nil{
callBackClosure!("xiaoming","kuku")
self.navigationController?.popViewController(animated: true)
}
}
小结:闭包回调一般用来实现界面间的传值,通常和func函数实现传值共同使用。把大量数据通过func传过去--->然后用户进行选择--->通过闭包回调将用户选择的内容传递回来--->更新原界面,显示用户选择的内容。
实现过程中的小坑:
@objc func coco1()-> Void{
let view2 = ViewController2()
view2.callBackClosure = { (str,name) in
print(str)
}
self.navigationController?.pushViewController(view2, animated: true)
}
在这段代码中,如果你将标红的view2换成ViewController2,就没办法传值了,有懂的小伙伴欢迎留言帮忙解释一下哈,感谢!!!
二、通知传值
实现方法
(1)传值方
NotificationCenter.default.post(name: NSNotification.Name.init("ppp"), object: nil, userInfo: ["one":"The author is very handsome"])
(2)接收方
NotificationCenter.default.addObserver(self, selector: #selector(push1), name: Notification.Name.init("ppp"), object: nil)
函数
@objc func push1(notif:Notification){
print(notif.userInfo["one"])
}
这样就okk了,userInfo中的数据是字典类型的,搞就完事了。
本期内容到这里就结束了,hxd们886!!
(强烈建议看一下“prician”这位漂亮小姐姐写的博客,嘎嘎棒,好人一胎180个)