是时候适配 Swift 3 了吗——专访 LINE iOS 开发工程师王巍
王巍(@onevcat),江湖人称“喵神”,iOS 和 Unity3D 开发者,旅居日本,目前供职于 LINE,著有《Swifter - 100 个 Swift 必备 tips》,同时也是翻译项目 ObjC 中国的组织者和管理者,维护 VVDocumenter-Xcode 及 Kingfisher 等开源项目。
王巍 LINE iOS开发工程师(Photo by 李涛 Geek2Startup)
前言
对于众多 iOS 开发者来说,提升技能最多关注的非唐巧与王巍(以下称“喵神”)的博客莫属。印象里的喵神是当之无愧的「三好」,比如在今年的 WWDC 即将开始之前,喵神便特地为初次参会的开发者写了攻略。而即使是我这个技术渣去请教他各种问题,也会耐心细致地解答。除却技术问题本身,笔者也很想知道,在日常的项目开发中,喵神是否也会碰到一些让他颇感头疼的问题,结果他是这样说的——“技术上的问题倒是都不难解决,最困难的还是和人交流”。不禁让我想起了热爱写代码、玩游戏、读书而不太乐于交流却在不久前被我强拉着说了几个小时话的 YYKit 作者 @ibireme。
去年 MDCC 移动开发者大会便曾邀请在日本的喵神回国分享,然彼时因刚荣升奶爸,牵挂家人未能成行。而今年,在 MDCC 再次发出邀请时,他欣然应允,并与我们一起共同策划了整个 iOS 开发峰会,希望能够为国内的 iOS 开发者们带来「高质量且实用」的新技术与成熟项目的经验分享与实操演示。
而这次的采访一方面源于 MDCC 2016,另一方面,也是基于目前在 iOS 开发者群体中所面临的棘手问题,比如:
-11W+行的代码来适配 Swift 3 是一种什么样的感受?
-感觉自己被掏空。。。
-∑(O_O;)
这是一段真实的对话,主人公是国内一个非常有格调的美食类 App 的 iOS 负责人。在 Swift 3 发布后,他们的团队便率先开始了对于 Swift 3 的适配,然而,「被折腾得死去活来」是他的原话,语法改完,依然跑不起来。而笔者在与多位 iOS 工程师朋友交流时,也发现,苹果简直让全世界的 iOS 开发者与 Swift 谈了一场「虐恋」。于是,我便带着他们当前所面临的以 Swift 3 为主的问题请教了喵神。
采访
请分享一下您当前正在做的事情。
王巍:正在将我的几个 Swift 写的开源项目(比如 Kingfisher 和 Rainbow)进行 Swift 3 适配。Swift 3 中 API Guide 和很多现有的内容都发生了改变,所以进行版本适配需要花不少精力。
在日常的开发中,您有遇到哪些比较头疼的问题,以及如何解决的?
王巍:技术上的问题倒是都不难解决,最困难的还是和人交流。比如如何与策划或者设计人员协调,如何合作来打磨用户满意,维护方便的优秀项目,是比大多数技术问题要困难的挑战。
目前在 iOS 开发上您有哪些特别关注的技术?正在深度研究的是?
王巍:自从去年 WWDC 以来,一直对面向协议编程和 Swift 中的泛型应用很感性去。现在正在挖掘泛型和 Cocoa 到底能够融合到什么样的程度,这个新的编程范式是否能够很好地用在 App 开发中。
在日本以及 LINE 公司工作,有哪些深有感触的事情?比如技术层面、团队氛围等方面。
王巍: 日本的开发团队在技术上可能没有太多能值得称道的地方,但是团队里开发者的认真和严谨确实是让人佩服。相对来说,LINE 的组织架构比较扁平,工程师之间,工程师与策划或者设计之间,都是直接进行交流。这种时候开发文档和企划书就尤其重要。而日本不少开发者能够做到丝毫不差地按照开发文档交付项目,专业态度非常好。
I love Swift! (Design by MWJ CSDN)
现在还不到实际项目适配Swift 3的时候
请问您对于今年 WWDC 上 Swift 3 升级有着怎样的看法?
王巍: Swift 3 是这门语言开源后的第一个大版本,这次更新的幅度远超以往任何一次升级,也可以预见,之后 Swift 的变化也不再可能像这次这么大的幅度。综合来说,Swift 的开发团队想要在新版本中解决从 Objective-C 转换中最后的一些遗留问题。同时,在开源社区的帮助下,很多开发团队没有考虑到的细节也得到了完善。Swift 的开源带来了社区对这门语言更深入的了解,以及更迅速的进化。Swift 3 的更新的方向也十分令人激动。
您如何看待 Swift 3 包含 ABI 不稳定、语法变太多、API 变了又变?什么时候能用上?
王巍: API 上最大的变化的原因是要遵循新的 API Guideline,而新的 API Guideline 的目的只有一个,那就是让通过 Swift 使用 Cocoa 框架更加自然。如果说 Swift 1 和 2 还是带着 Objective-C 的枷锁跳舞的话,Swift 3 中这个限制在很大程度上可以说消失了。Swift 3 中开发者可以用更 Swifty 的方式来使用这门语言,同时这也意味着 Swift 和 Objective-C 之间的联系将更少(毕竟如果要提供两种语言都合适的 API 的话,需要很多额外工作量)。
在实际项目中,现在就适配 Swift 3 是否适合?《Swifter - 100 个 Swift 必备 tips》现在有更新计划?
王巍: 实际项目的话建议还是等一段时间。因为 Swift 3 改动很大,所以不一定所有第三方框架都会在第一时间进行适配。另外,对于较大项目,即使在自动迁移的帮助下,想要全面转向 Swift 3 的 API 也需要花费不少精力。Xcode 8 中 Swift 2.3 和 Swift 3 可以同时共存,Apple 也将接受这两个版本的 Swift 项目,所以 App 的项目并不着急马上进行适配。不过如果你是框架作者的话,尽早将项目转为 Swift 3 会是很好的选择。《Swifter - 100 个 Swift 必备 tips》有计划更新到 Swift 3,不过鉴于现在 beta 版也还不稳定,有不少特性还没有最后实装,所以这本书的更新会在稍后一些时候进行。
在将项目代码升级至 Swift 3 的过程中,都遇到过哪些问题?
王巍: 我正在将我的开源框架升级到 Swift 3,遇到的最大的问题是 API Guideline 的一些细节上的处理。大部分时候一个 API 的命名是比较容易确定的,但是对于某些模棱两可,可能适用于多条规范的 API 名字,在处理上需要考虑更多东西。举个例子,不少接受通用类型(比如 Int,String)作为参数的方法,它们的名字就难以确定。
现如今,很多新加入的 iOS 开发者首选学习的是 Swift,是否意味着 OC 式的语法、API 等都可以舍弃了?
王巍: Swift 作为入门 iOS 开发来说是非常理想的,但是国内在接受新技术这方面相对似乎要慢一些,所以在之后一年可能还是需要简单了解 Objective-C 的语法。国内 Swift 适配的速度较慢的一个重要原因是 Swift 程序的运行时会被打包到 App 中,导致体积增大,而国内用户恰好比较看重流量。所以希望在 Swift 运行时被集成到系统中后国内的 Swift 应用和开发能有一个大的增长,这样我们就可以摆脱 Objective-C 的一套不安全和相对落后的东西了。
开源的Swift对于跨平台应用开发是否会造成影响?
王巍: 对于移动端来说,Swift 还不能用于 Android 开发,所以并不会产生什么影响。不过,相对来说,Android 开发可能会由于 Swift 的压力,而对 Kotlin 之类的更先进的语言进行一些尝试。对于服务器端来说,Swift 虽然可以进行开发,但是相应的工具链和生态相比其他成熟的服务器语言来说还有一定差距。一些 Swift 开发者可能会尝试使用这门语言进行服务器开发,这样他们就能够在客户端和服务器同一语言,甚至共用一些模块。不过现在都处于早期的尝试中,要说会造成影响还为时过早。
编程语言与书籍启发
就不断演化的语言来说,我们正在向何处去?比如,5 年后会如何?对于您来说,您认为一门语言向开发者提供什么是最重要的?
王巍: 最近几年编程语言有一种趋同的趋势,这也是最近几年大家在工程实践中总结的一些经验的体现,比如更多地使用函数式、避免 null 指针等等。总体来说,编程语言正在向更安全,更易于开发者书写的方向发展。要预测五年后的情况太难,不过相信之前的这些趋势会继续发展。另外,相比于一些通用型的语言,那些特别设计来针对某一专门领域的语言也将会有很大空间。
迄今为止,对于您在从事开发方面影响最大的著作是?您有着哪些启发?
王巍: Robert C. Martin 的 The Clean Coder。这本书教会了我如何以一个专业程序员的思维来思考问题,也让我明白了开发中必须做出的一些取舍。
MDCC 2016
在今年的 MDCC 移动开发者大会上,准备和开发者们分享什么?
王巍: 可能会分享一些面向协议编程和泛型如何与 Cocoa 结合使用的实例,因为在项目里尝试用了一些,觉得对改善现有设计很有帮助。
您最期待在 MDCC 2016 上看到哪些内容?收获什么?
王巍: 希望能看到更多的改善项目设计,组织架构以及可维护性的思路,因为工作中的软件开发我自己所追求的主要是代码简洁可读以及保证可维护性,因此如果能有一些这方面的启发的话,会对日常开发有很大帮助。
最后,以一张今年初与iOS众大神的合影结束这次的采访,同时感谢喵神于百忙之中的答疑解惑。9 月 23-24 日,在北京• 国家会议中心举行的MDCC 2016移动开发者大会上,喵神将在现场进行交流与分享,欢迎面基。
Swifter (Photo by 李涛 Geek2Startup)
本文将刊登在《程序员》杂志8月刊,订阅详情可点击:http://dingyue.programmer.com.cn/。
2016 年 9 月 23-24 日,由 CSDN 和创新工场联合主办的“MDCC 2016 移动开发者大会• 中国”(Mobile Developer Conference China)将在北京• 国家会议中心召开,来自iOS、Android、跨平台开发、产品设计、VR开发、移动直播、人工智能、物联网、硬件开发、信息无障碍10个领域的技术专家将分享他们在各自行业的真知灼见。
从即日起至8月7日23:59,MDCC 2016移动开发者大会门票5折优惠。五人以上团购更有特惠,限量供应,预购从速。(票务详情链接)
是时候适配 Swift 3 了吗——专访 LINE iOS 开发工程师王巍相关推荐
- 专访Mycat核心开发成员王金剑 :借助Mycat轻松抵御海量并发
专访Mycat核心开发成员王金剑 :借助Mycat轻松抵御海量并发 发表于2015-12-25 14:51| 1401次阅读| 来源CSDN| 5 条评论| 作者夏梦竹 专访王金剑开发人员数据分析数据 ...
- IOS开发Swift——开发小知识(持续更新)
如有错误,请指正!谢谢! 侵权删!(部分转载) 1.PHAsset获取本地视频的url PHCachingImageManager().requestAVAsset(forVideo: asset, ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- 专访搜狗输入法 iOS 版开发负责人李腾杰:第三方输入法开发与优化实践
输入法是一种对性能要求极高的产品,不同于普通应用开发,很多在普通应用开发看来不是问题的,在输入法看来却是比较关键.同时,由于 iOS 系统的某些限制,输入法不得不在产品功能和性能方面做出调整,以尽可能 ...
- swift 组件化_打造完备的iOS组件化方案:如何面向接口进行模块解耦?
作者 | 黑超熊猫zuik,一个修行中的 iOS 开发,喜欢搞点别人没搞过的东西,钻研过逆向工程.VIPER 架构和组件化. 关于组件化的探讨已经有不少了,在之前的文章 iOS VIPER架构实践(三 ...
- Android与Swift iOS开发:语言与框架对比
Swift是现在Apple主推的语言,2014年新推出的语言,比 Scala等"新"语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android N ...
- iOS 开发 : 14个技巧助你适配 iOS10
iOS 开发 : 14个技巧助你适配 iOS10 1.Notification(通知) 自从 Notification 被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 1 ...
- iOS开发 适配iOS10
2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线. 作为开发者,如何适配iOS10呢? 1.Notification(通知) 自从Notificat ...
- 从Java/Android到Swift iOS开发:语言与框架对比
今天分享的主题是Java/Android开发人员如何快速上手Swift iOS开发.主要内容如下: WhyFrom Java/Android to Swift Swift语言为什么值得学习? Java ...
- Android Swift iOS开发:语言与框架对比
转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...
最新文章
- Nmap源码分析(主机发现)
- 简析TCP的三次握手与四次分手
- php ajax 更改状态,phpajax实现无刷新获取天气状态_PHP教程
- jmeter压力测试_用Jmeter实现对接口的压力测试
- android中requestFocus 以及与setFocusable的区别
- 【Linux】Linux的关机和虚拟机克隆、快照
- 完整、详细的MySQL规范
- markdown这么好用的东西我才知道。。。多么不折腾的我。。。
- 如何在 macOS Monterey 正式发布之前备份您的 Automator 作品?
- TIA 和step 7硬件更新网址汇总
- 内连接、外连接和全连接的区别
- 【MATLAB信号处理】信号波形的产生及系统时域分析
- c语言四个人中有一个人是小偷,涛涛学BASIC逻辑判断
- 向iPhone模拟器中添加视频
- python线程如何终止线程_python怎样终止线程
- 北京专精特新企业申报攻略
- 最早的即时通讯软件哪一个,你知道吗?
- android 加载高德地图api,Android应用引入高德地图API
- Gym 101778G
- python中文开发环境_python中文开发环境