作为一个android客户端开发,如果你不懂点ios开发,怎么好意思说自己是客户端开发呢,本文讲解如何让android开发码农在一个星期上手IOS开发 --《记录自己IOS开发经历》。
一、开发工具对比
AndroidStudio作为android开发的御用编辑器,相信小伙伴不用我解释太多,其中有太多好用到哭的功能不想过多解释,相比之下,XCODE作为IOS开发的御用编辑器,大部分功能就比android studio要落后很多,我接触过一段时间,有以下几点感悟:
1、Version 8.2.1之后,直接导致之前的很多插件都没法使用了。
2、swift代码重构等功能迟迟没有提供,相信这对于所有小伙伴来说,至少是1万点伤害。
3、查找功能差Android一条街,double shift查找各种,而XCODE需要点击到左下角,在选类型,在查找。
4、调试功能相对于AndroidStudio来说,有点类似于我国和美帝的差距
5、自动补全,代码着色,注释功能经常间歇性抽风,不知何故,严重需要重启MAC才恢复,(注意,不是重启XCODE),比如下面注释不能使用的场景
6、等等,不想说太多。。
但是,你必须得接受一个事实XCODE毕竟是IOS开发的御用IDE,不用也不行啊,那么,有没有什么办法,使我们在开发ios app的时候,稍微爽点,答案,当然是有的,比如,我是这么解决的。
更加不忍直视的是,直接可以看部分代码片段,恐怕xcode是不会出这么人性化的功能了。
呵呵,聪明的你已经明白了,同时开一个APPCode 来作为辅助,是一种不错的选择,而且这对于曾经是android开发的你来说,绝对是一种增强型体验,快捷键就使用你之前的即可,查找,rename,等等功能爽的不要不要的。
二、干货来了,如何入手
反正以上槽也吐了,那么,接下来总要说点好的吧。
1、感谢苹果推出swift这种语言,使得android码农可以非常迅速的搞起IOS开发,如今SWIFT已经3.1了,如果,你们打算从新撸一款APP,如果还是说,用OC,我建议你治疗一下,swift已经很成熟了,不存在升级一个版本,面临大量代码改写的悲剧了,而且,git上swift的开源库,也是慢慢的够用了,退一万步讲,即便没有,引入OC的库,也是能够用的。那么,如果你打算搞起swift,我肯定是要推荐一些库给你的:以下内容纯属干货:
2、以上说了语言上的选择,swift没错,那么,接下来你肯定是要熟悉swift语法的,我建议你看看
这边书,如果你不太喜欢阅读英文,没有关系,社区已经有人翻译了中文版本的,地址在这里;英文原本直接在官网下载即可。
我想,你一定会说,究竟怎么一个星期就可以搞起?
a、swift语法的熟悉,你可能要注意一下let,optional,guard,switch,tuple之类的,其他的,可以在一遍撸一遍学了,反正用几次就熟悉了,可能语法我只能给你2天时间,不能再多了,ps(学习语法的时候,最好是拿你比较熟悉的语言去对比,个人觉得这种方式是最快的)
b、其实IOS开发的重点并不在语法,而在于苹果为IOS开发者提供的一些UI层面的库的熟悉,这个我只能给你4天时间,不能再多了,这部分的学习相对来说是比较痛苦的,不过,方法依然是对比学习,对照着android 的四大组件,相信你很快就可以从UIKIT中找到他们的影子,举一个最基本的例子。
相信你看到这幅图之后,脑海里面一定是出现了:
没错,就是这样来的,其他的uitextview ,uitableview,uilabel,uiimageview不能说再多了,都是这个套路。
c、推荐工具机器书籍:
dash是一定需要装的,这个查找资料实在不能方便太多,至于书籍,个人觉得没有必要推荐,如果实在要推荐,那肯定是苹果的开发者帮助文档了,直接下载在dash里面看就好了。
至于工具,stackover ,和 google 才是你最需要的,我在爬坑的过程中,遇到的99%的问题都是在stackover上找到了解决方案,还有1%的是至今也没有解决的,问同事,同事也是无解。。
d、swift的亮点有哪些?面向协议vs面向对象
没错,swfit是面向协议的编程语言,加上逆天的协议扩展,各种语法糖只有你想不到,想到了都惊呼,居然可以这么玩。
协议是可以有默认实现的,请在撸的过程中慢慢体会这个的好处,至少,可以为你省去不少的无用代码《空实现》,当然,有人可能会说,这是你定的协议违背的单一职责原则吧,好吧。。
函数式,真的假的,还函数式?
是真的,千真万确,swift是可以玩函数式的。
这不,有人出了一本书,而且,喵神还帮忙翻译不是。
三、俗话说,会列表懂详情,你就是一个“合格”的客户端开发
那么,问题来了,IOS中,如何去做一个列表:实际上,接触过之后,你会发现套路很简单:
a、使用到的组件当然是UITableView,那么,和RecyclerView对比,有什么区别呢?
b、RecyclerView中的列表项的数据是有adapter的onCreateViewHolder和onBindViewHolder合力完成,onCreateViewHolder负责layout出cell的架子,onBindViewHolder负责给架子填充实际的数据,那么IOS中是如何做的呢?
同理,
UITableView的这些个方法可以给你创建cell的架子,然后数据的绑定就由DataSource的
这个方法提供。那么问题来了,UITableViewDelegate是干嘛的呢,相信你见过ios对于列表项的左滑出现删除,乃至,长按拖动列表项的位置,其实都是由这个代理提供对应的接口去实现。
c、因此,细心的你会发现,两个平台的在列表上的实现基本上原理是一致的,不同的是采用的设计模式不同,android显然是使用的适配器模式,一股脑的所有的动作都在adapter中做好就可以了,两者也均有CELL重用机制,也都会遇到列表常见的性能问题,这些也需要在开发的过程中细心的去体会。
d、详情不必多说,只要你了解了UIViewController的生命周期,以及navigationController对于Controllers的管理栈,一切都是和android惊人的类似,但是似乎IOS又简单了不少,至少在生命周期函数上,IOS没有什么onstop,(onresume可以找到对应的viewWillAppear)等等,fragment的概念似乎在IOS中不存在,不过可以类比为一个UIVIEW吧(本人暂时这么理解)。
四、其实,IOS开发也是有很多坑在等待着你,不过别急,你踩过的,99%都可以在stackover和google上找到
a、比如,IOS开发中,代理的使用是非常常见的,但是稍稍不注意,就会造成循环引用,什么是循环引用,看图
uiview作为子view加入到ViewController中,出于某种原因,uiview需要持有ViewController的引用,比如可能某些事件需要通过代理传递进去,因此,循环引用稍稍不注意就悄然发生了,那么,怎么解决
使用weak:
weak may only be applied to class-bound protocol types是个什么鬼,在java中,就是这么搞的啊,stackover一下咯,这里发现了答案
b、连续pushViewController,先pushA,在A的viewDidLoad中马上pushB,结果B没有出现,我的想法是让A作为一个过渡的页面,(因为经常有这种需求,主人态客人态的页面结构差异很大,因此我习惯做两个页面。然后通过一个导航页来跳转)。
那么原因是什么,这次,我没有搜索到答案,可能是我输入的关键字不准,对于问题的描述不够准确吧,但是我还是解决了,我猜想可能是因为,两次,push的时间间隔不能太短,于是我这么做了
使用timer做一定的延时,结果,果然就解决了。所以有时候猜一猜,别怕,大胆尝试,也许问题也能解决。
c、总结一下,在有android开发基础上做到ios开发入门是比较简单的,但是,要做到ios开发上游刃有余,还是需要一定的时间的,那么,如何加速这个过程,只有让自己不断的痛苦,比如,去github上学习开源的项目,在比如,直接熟悉你们现有的项目的ios版本。
【腾讯WeTest iOS预审工具】
为了提高IEG苹果审核通过率,腾讯专门成立了苹果审核测试团队,打造出iOS预审工具这款产品。经过1年半的内部运营,腾讯内部应用的iOS审核通过率从平均35%提升到90%+。
现将腾讯内部产品的过审经验,以线上工具的形式共享给各位。
在WeTest腾讯质量开放平台上可以在线使用。点击http://wetest.qq.com/product/ios即可立即体验!
如果使用当中有任何疑问,欢迎联系腾讯WeTest企业QQ:800024531
【一键扫描】只需提供ipa包、审核图片、审核视频、应用描述,即可在4小时内拿到一份完整的检测报告,定位问题的同时提供解决方案,助您成功通过审核。
【案例分享】集结iOS审核失败常见原因,丰富案例为您提供参考依据。
【专家服务】腾讯专家团队为您分析各种疑难杂症,提出最优解决方案。
【ASO优化】专业优化AppStore内关键字搜索结果,让产品离用户更近一步。希望App/手游在预审验收保证下,都可以快快乐乐过审,开开心心赚钱。,开开心心赚钱。