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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值