是时候适配 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 的组织架构比较扁平,工程师之间,工程师与策划或者设计之间,都是直接进行交流。这种时候开发文档和企划书就尤其重要。而日本不少开发者能够做到丝毫不差地按照开发文档交付项目,专业态度非常好。


现在还不到实际项目适配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)



移动一小步,视界大不同!

更多程序员技术交流,奇闻轶事,

欢迎扫描下面二维码下载CSDN
Android、iOS移动客户端

长按二维码关注我

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘贴.待开发的功能:1.支持自动生成约束2.开发设置页面3.做一个浏览器插件,支持不需要下载整个工程,可即时操作当前蓝湖浏览页面4.支持Flutter语言模板生成5.支持更多平台,如Sketch等6.支持用户自定义语言模板
现实生活中,我们听到的声音都是时间连续的,我们称为这种信号叫模拟信号。模拟信号需要进行数字化以后才能在计算机中使用。目前我们在计算机上进行音频播放都需要依赖于音频文件。那么音频文件如何生成的呢?音频文件的生成过程是将声音信息采样、量化和编码产生的数字信号的过程,我们人耳所能听到的声音频率范围为(20Hz~20KHz),因此音频文件格式的最大带宽是20KHZ。根据奈奎斯特的理论,音频文件的采样率一般在40~50KHZ之间。奈奎斯特采样定律,又称香农采样定律。...............
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿遍又亿遍,久久不能离开!看着小仙紫姐姐的蹦迪视频,除了一键三连还能做什么?突发奇想,能不能把舞蹈视频转成代码舞呢?说干就干,今天就手把手教大家如何把跳舞视频转成代码舞,跟着仙女姐姐一起蹦起来~视频来源:【紫颜】见过仙女蹦迪吗 【千盏】一、核心功能设计总体来说,我们需要分为以下几步完成:从B站上把小姐姐的视频下载下来对视频进行截取GIF,把截取的GIF通过ASCII Animator进行ASCII字符转换把转换的字符gif根据每
【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至2022年4月底。我已经将这篇博客的内容写为论文,上传至arxiv:https://arxiv.org/pdf/2204.10160.pdf欢迎大家指出我论文中的问题,特别是语法与用词问题在github上,我也上传了完整的项目:https://github.com/Whiffe/Custom-ava-dataset_Custom-Spatio-Temporally-Action-Video-Dataset关于自定义ava数据集,也是后台
因为我既对接过session、cookie,也对接过JWT,今年因为工作需要也对接了gtoken的2个版本,对这方面的理解还算深入。尤其是看到官方文档评论区又小伙伴表示看不懂,所以做了这期视频内容出来:视频在这里:本期内容对应B站的开源视频因为涉及的知识点比较多,视频内容比较长。如果你觉得看视频浪费时间,可以直接阅读源码:goframe v2版本集成gtokengoframe v1版本集成gtokengoframe v2版本集成jwtgoframe v2版本session登录官方调用示例文档jwt和sess
【Android App】实战项目之仿微信的私信和群聊App(附源码和演示视频 超详细必看)
用Android Studio的VideoView组件实现简单的本地视频播放器。本文将讲解如何使用Android视频播放器VideoView组件来播放本地视频和网络视频,实现起来还是比较简单的。VideoView组件的作用与ImageView类似,只是ImageView用于显示图片,VideoView用于播放视频。...
采用MATLAB对正弦信号,语音信号进行生成、采样和内插恢复,利用MATLAB工具箱对混杂噪声的音频信号进行滤波
随着移动互联网、云端存储等技术的快速发展,包含丰富信息的音频数据呈现几何级速率增长。这些海量数据在为人工分析带来困难的同时,也为音频认知、创新学习研究提供了数据基础。在本节中,我们通过构建生成模型来生成音频序列文件,从而进一步加深对序列数据处理问题的了解。
基于yolov5+deepsort+slowfast算法的视频实时行为检测。1. yolov5实现目标检测,确定目标坐标 2. deepsort实现目标跟踪,持续标注目标坐标 3. slowfast实现动作识别,并给出置信率 4. 用框持续框住目标,并将动作类别以及置信度显示在框上
数字电子钟设计本文主要完成数字电子钟的以下功能1、计时功能(24小时)2、秒表功能(一个按键实现开始暂停,另一个按键实现清零功能)3、闹钟功能(设置闹钟以及到时响10秒)4、校时功能5、其他功能(清零、加速、星期、八位数码管显示等)前排提示:前面几篇文章介绍过的内容就不详细介绍了,可以看我专栏的前几篇文章。PS.工程文件放在最后面总体设计本次设计主要是在前一篇文章 数字电子钟基本功能的实现 的基础上改编而成的,主要结构不变,分频器将50MHz分为较低的频率备用;dig_select
1.进入官网下载OBS stdioOpen Broadcaster Software | OBS (obsproject.com)2.下载一个插件,拓展OBS的虚拟摄像头功能链接:OBS 虚拟摄像头插件.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)提取码:6656--来自百度网盘超级会员V1的分享**注意**该插件必须下载但OBS的根目录(应该是自动匹配了的)3.打开OBS,选中虚拟摄像头选择启用在底部添加一段视频录制选择下面,进行录制.
Meta公司在9月29日首次推出一款人工智能系统模型:Make-A-Video,可以从给定的文字提示生成短视频。基于**文本到图像生成技术的最新进展**,该技术旨在实现文本到视频的生成,可以仅用几个单词或几行文本生成异想天开、独一无二的视频,将无限的想象力带入生活
音频信号叠加噪声及滤波一、前言二、信号分析及加噪三、滤波去噪四、总结一、前言之前一直对硬件上的内容比较关注,但是可能是因为硬件方面的东西可能真的是比较杂,而且需要渗透的东西太多了,所以学习进展比较缓慢。因为也很少有单纯的硬件学习研究,总是会伴随着各种理论需要硬件做支撑,所以还是想要慢慢接触理论学习。但是之前总找不到切入点,不知道从哪里开始,就一直拖着。最近稍微接触了一点信号处理,就用这个当作切入点,开始接触理论学习。二、信号分析及加噪信号处理选用了matlab做工具,选了一个最简单的语音信号处理方
腾讯云 TRTC 实时音视频服务体验,从认识 TRTC 到 TRTC 的开发实践,Demo 演示& IM 服务搭建。
音乐音频分类技术能够基于音乐内容为音乐添加类别标签,在音乐资源的高效组织、检索和推荐等相关方面的研究和应用具有重要意义。传统的音乐分类方法大量使用了人工设计的声学特征,特征的设计需要音乐领域的知识,不同分类任务的特征往往并不通用。深度学习的出现给更好地解决音乐分类问题提供了新的思路,本文对基于深度学习的音乐音频分类方法进行了研究。首先将音乐的音频信号转换成声谱作为统一表示,避免了手工选取特征存在的问题,然后基于一维卷积构建了一种音乐分类模型。
C++知识精讲16 | 井字棋游戏(配资源+视频)【赋源码,双人对战】
本文主要讲解如何在Java中,使用FFmpeg进行视频的帧读取,并最终合并成Gif动态图。
在本篇博文中,我们谈及了 Swift 中 some、any 关键字以及主关联类型(primary associated types)的前世今生,并由浅及深用简明的示例向大家讲解了它们之间的奥秘玄机。