• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

对swift开发中的unwinding segue的一些理解

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

swift是比较小众的开发语言,与苹果系列的APP对应。此外,swift还是一门新生的语言,因此,在swift学习的道路上,没有很多前辈帮忙采坑,我们在学习的时候必须长期总结积累经验。

在一个小项目中,我就被swift的unwinding segue搞糊涂了。

情况是这样的:

 

这个小程序写完后,效果应该是像记事本一样。可是当我点击tableView的时候,他会在后面附加值,而不是去修改原值。

exitFromThisViewController(segue: UIStoryboardSegue)函数是与exit对应的,所谓exit,就是(标蓝部分):

在定义好这个方法的时候,它的关联动作是空的,也就是函数左边关联标志是空心圈。当我按住control,让save按钮与exit关联时,会给出想要关联的方法,点击即可。在一段时间内,我一直以为这就是所有的回退过渡操作,但是我还是太天真了!因为我在另一个project里面测试了这个方法,发现点击按钮没有任何反应!也就是说,光有这个按钮和对应的exit与函数,不会对跳转页面有任何帮助!

之后为了测试这个方法,我建立了一个测试工程,操作与之前一样,代码很简单:

按理说,效果应该是在控制台上输出5行的test。可是我得到的结果是:

 

没错,就是什么都没有,这意味着这个函数压根没有被这个相应动作关联,那我之前那些操作是干啥的???!!!

以上就是问题的根源,接着,我又继续往下写:

这次是实打实的关联了响应动作,结果就是:控制台输出了5个backToFormerView。

再然后,我将之前关联的相应动作删掉,移到了想要跳转到的页面(假设页面A和页面B,这个按钮想从B跳转到A,原来exitFromThisViewController函数是写在B里的,现在写进A中)。

这次程序完美执行了,可是!看看控制台是这样的:

也就是说,exitFromThisViewController函数被执行了两次!

于是我就设置断点。没问题,的的确确执行顺序是:

backToFormerView->backToFormerView.performSegue->exitFromThisViewController*2.

再之后,我又小心翼翼把performSegue函数注释掉,结果就成了自己想要的5个backToFormerView和5个test。

别以为这样问题就解决了。在我踌躇满志的将原来小程序中的performSegue函数注释掉的时候,神奇的事情发生了:页面之间跳转无法传值!程序没崩溃,我崩溃了。


到这为止,我说的有点乱。总结一下,就是

  1. exitFromThisViewController不能直接使用,需要和响应动作一起使用;
  2. 不添加performSegue函数,两个页面之间无法传值。(performSegue函数本身就是为了页面间传值存在)但可以跳转;
  3. 在跳转时,会执行两个函数的关联操作。也就是exitFromThisViewController与backToFormerView会一起执行,但是顺序不确定(现在我还不知道,因为我的测试工程是先响应动作,后exit;而我的小程序工程先exit后响应动作。)
  4. 如果有performSegue函数,那么exitFromThisViewController函数会执行两遍。应该是Xcode将即将做的动作存到栈中,然后再从栈中依次执行未响应的动作进行处理。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap