# DiDi（二十）

> 原文：https://pjhubs.com/2018/05/02/DiDi%EF%BC%88%E4%BA%8C%E5%8D%81%EF%BC%89/
>
> 作者：PJHubs · 发布于 2018-05-02 · 标签：iOS、DiDi

## 2018-05-2
今天主要把消息模块的整体全部迁移到了Swift上，然后又双踩了之前工程师埋下的坑，在第二次拉数据时，先做一次判断，如果第一次拉回来的数据不为空，那就把给第二次的某个参数（假设为A）设置为第一次拉回来数据的第一个data中的A，最后才能去拉数据。

刚开始说实话没看懂要干嘛，po出数据后发现A是代表了当前数据的自增id，这个接口没有做分页，我就在猜想，会不会是通过这个A参数值做上下拉刷新呢？当接口检测到了当前的A参数值不为0，说明用户是正在进行刷新操作，嗯，改成了Swift。

第一次请求正常，第二次直接空了，原因是OC和Swift混编后NSNumber类型的问题，改完后，第二次数据还是空，弄了好久，发现不大对劲，为啥之前是OC时多次刷新没问题，改成了Swift死活拉不来呢？最后没办法，下了一个线上版本仔细一看，woc，原来一直都没有做刷新，说白了我纠结了一中午的问题最后原来是坨shit。😑

随后就开始了跟进1.4.0，今天主要是开始了做网络检测，网络检测完后数据缓存也就上来了，各种逻辑的判断也就上来了，慢慢做的事情变得有趣多了。而且还做了一个我之前非常的想做的事情，PM正在朝着微信的设计发展，啊哈哈，当初也想着思考思考微信的做法是怎么来的，现在好了，可有的玩了。😜。

在调研网络检测的过程中，之前有看到项目中的SSO这块做的内外网检测，主要是用到了官方的Reachability并结合了ping，但官方的这个玩意是个坑，这有两篇讨论说了为啥是个坑。
[http://www.cocoachina.com/bbs/read.php?tid=283498](http://www.cocoachina.com/bbs/read.php?tid=283498)
[http://www.cocoachina.com/bbs/read.php?tid=40989](http://www.cocoachina.com/bbs/read.php?tid=40989)

最后我想用[https://github.com/dustturtle/RealReachability](https://github.com/dustturtle/RealReachability)。

但是突然发现好像之前有看到滴滴内部也有做网络检测的工具，当然AF也有提供，比如[这篇文章](https://blog.csdn.net/vincent_lhj/article/details/50924954)

但是我主打的是优先使用公司内部库，毕竟出了问题直接问嘛，其次如果有工具就用现成的，但是有个大前提，这个工具得是经得住考验的，如果star没超过100，不纳入考虑范围，最后才是自己造。


## 2018-05-03

今天完善了一下关于首页headTitle监听网络状态，之前的做法有点喧宾夺主了，headTitle同样可以理解为是MVC中的V，之前的做法破坏掉了结构，headTitle直接做了C，最终的做法是设置`headTitleString`和`headTitleState`枚举变量，并重写它们的`setter`方法，在枚举变量`headTitleState`的setter方法中根据枚举值分别设置`headTitleString`，在`headTitleString`的`setter`方法中根据赋值重新`sizeToFit`和更新frame即可。

算是较好的完成1.4.0中的一个需求了，感觉这次的需求提的都很棒！学到的东西也不少，尤其是这波仿微信的headTitleState状态做的还算是靠谱，不过还不算完美的靠近需求，因为需求说连接服务器时需要加上菊花和“连接中”，获取数据时改为“加载中...”，断网或网络不好时改为“滴滴数据（未连接）”，第一个就没做，刚开始卡在这了，做完后两个再回过头一想，不太对啊，微信和钉钉之所以有“连接中”的状态，那是因为要开始长连接，我们这都是无状态，哪来的“连接中”🙄，差点被PM坑。

今天入职了一个iOS，刚开始觉得还可以，到后边越感觉不太对劲，感觉这人的心态发生了变化，总感觉哪怪怪的。跟他一块坐上班车后，在交流的过程中才发现，woc什么鬼，又来一个嫌弃做的东西简单垃圾、公司福利不好、没人带的破玩意儿？我只是让他自己下去办公区食堂吃了饭，说了滴滴只包晚饭，估计被HR吓得说吃公司免费晚餐要待到8点半以后等等balabla综合得出的我滴福利真垃圾吧？

嫌弃就嫌弃呗，我也有嫌弃的时候，但是嫌弃环境的同时你得表现出你的实力是远远超出这个环境所代表的实力啊，让他自己跟着我之前写的“新人指南”把工程跑起来，来了一句“啊，我git都快忘光了”。🙄，到底是个啥，玩GitHub的能忘git么？而且涉及到的操作只是clone个项目，开/检出个分支而已，这些不都是git的基本操作么？都没解决冲突呢，更何况，还啥都没做呢。😂。

因为跑的是内部库，`pod install`后要求做本地SSHkey的验证，第一步弹出是否进行SSHkey验证时看不都看直接说，出现这个原因是为啥？其实一看SSHkey就应该能够猜出是本地SSHkey需要重新生成并上传到内部git仓库上，但是就不看。🙂。

从那时起埋下了怀疑的种子，没想到后来还真验证了，居然不知道Xcode的`Automatically manage siging`，登录账号后开始懵逼，弄了一下午开发者账号，登录账号后居然不选开发账号，也不知道不登录账号是不能真机调试，难道之前没真机调试过？？？把工程运行起来后，居然。。。居然。。居然开始刷手机了，我记得当时自己慌得不行，一星期过去了代码都还没摸顺，真希望日后版本迭代时的新需求能够给我一个不同解决思路吧。

以上言论均为第一次交流给我的感觉，不是他嫌弃滴滴垃圾，嫌弃滴滴福利不好，我都嫌弃他没本事还要出来干啥子，没本事就先别嫌弃环境啊。md，真想说去年这个时候的自己连去个外包实习都被压榨周末时间，周末被喊去加班不但要自己买吃的加班费都没有，一个破本科生第一次实习能来滴滴算是我面试他的时候瞎了眼，跟leader说得再来至少一轮的逻辑面，就是不听我话，电面的结果只能算是他能不能参加面试而已啊！不是说就要定这个人了，😔，可能leader并不太能理解我的意思吧，给大家一个劝告，没有经历过面试就要的人，千万谨慎。

最令我伤心和气愤的是，在班车上他跟我说，“这个App挺简单的，也不需要这么多人吧？”，我说，“嗯，是挺简单的”，他一脸无奈的说，“那为啥要让我来这个组啊”。当时真是X了狗了，我也觉得微信挺简单的啊，我一个人也可以做出来啊，但是可能得做三年吧，更何况，我认为的挺简单，跟你所认为的是一个水平的简单么？费尽心思的重构了这么久，就是让你来看到就觉得非常的简单，是不是应该谢谢我哪？🙂。希望以后你真能给我一个不一样的解决思路吧。

以上均为气话。这次是我第一次当面试官的失败，承认我的失败。


## 2018-05-04

今天新同学又被`pod install`和`pod update`坑了，我无法理解的是为啥明明每次都是`pod install`成功，到头来却build失败，被告知缺少对应库，真是奇了怪，上次就一直被坑着，没想到这次又来，不过我估计可能是因为中途并未做“有效性验证”，导致在私有地址下的私有库并未拉下真正的库，我也没法看他的terminal，每次pod完就关掉，真是无语😶。反正下周新Mac也来了，就先拖着吧。

今天和他交流的过程中，我又发现了有个很奇怪的特点，问了下他之前有搞过RN、Weex么？我是没想到居然回了我，“没有，之前想学来着，但是没去成阿里就算了”，woc这是尼玛的什么回答。心里凉凉。。。

今天三分之一的时间在忙活首页断网下的提示，做着做着发现需求提的有问题，断网后，出现横栏，横栏上提示用户当前网络状况及出现重试按钮，点击重试按钮尝试重新连接服务器并load数据，做到最后发现不太对劲，这个横栏是用来检测用户设备当前的网络状态的，只要用户设备是连着网，就不会出现，一旦出现了横栏，那就说明当前用户设备是没网的，那问题就来了，居然都处在了断网的情况下，那重试按钮的意义何在呢？下周去跟PM仔细聊聊。

另外三分之一的时间在重写通用浏览器，参考了内网平台桔子堆的设计，每条消息分为公网或内网可见，当用户设备没网时直接显示没网状态视图，有网但不在内网环境下时显示连接内网视图，以上两个条件都满足后再显示出正式数据，按照之前滴滴数据App老版本的通用浏览器设计，之前的iOS实习生已经把它改成一坨屎了，加了一堆BOOL变量，变量名起的一点都不信达雅，如果这次我再不把这坨屎擦干净了，估计下次会成为一坨更大的屎，遂在已经完成Swift一期迁移的工作下再次挑起了通用浏览器Swift迁移，其实下午刚开始迁移的时候我心里是一点谱没有，真害怕最后玩崩了，不过毕竟是面向运气编程嘛，一次过，不过纠结了一下内外网的判断依据，之前的工程师是根据返回的数据中`appId`字段进行判断，但是在群里问相关的后端RD，居然跟我说内外网的判断不应该根据`appId`去做，这我就一脸懵逼了，难道说之前上的这四五个版本全特么是错的？😂。最后告诉我应该根据域名去做判断，好吧好吧，那看来以后又得强制用户升级一波了，PM估计要被气死，hhhh。
