irpas技术客

Swift 有关闭包回调的和通知传值的那些事(不坑版)_酷酷的崽儿_swift 通知传值

网络投稿 2327

废话不多说,直接开始正文。

一、闭包回调 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个)


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Swift #通知传值 #废话不多说直接开始正文