我在开发第一个Swift App过程中学到的四件事
本文转载至 http://www.itjhwd.com/wzkfyigeswiftsjs/
译者注:本文作者Greg Heo,这是他为讲授iOS 8 App Extensions视频教程而实际使用Swift开发了一款App的经验,来看看他的心得体验。
这个夏天我的app开发项目是Instant Poetry 2,它原本是Ray还是独立iOS开发者时编写的一个应用,现在我需要用Swift和iOS 8 API将它整个重写一遍。
对我来说这是一次丰富的学习体验 – 不但深入学习Swift和iOS 8的复杂细节,还思考了在未来如何更好的将这些经验传授给别人。
这里我就将在开发第一个Swift app过程中学到的四件事,分享给大家。
4) Swift仍然在演变当中
在整个夏天,Swift语言本身有了不少变化。我开始编写app时使用的Swift版本是beta 3,而每一次Xcode版本升级都带来语法变化和Cocoa方法签名的微调。

如果你计划使用Swift开发应用,你需要花精力关注这些变化并跟上Swift演进的步伐。
不过我认为这种精力花费的值得。使用最新和最好的工具是很重要的,另外关注语言的演变本身也将成为很好的学习经验。苹果一直关注和倾听来自开发者对于Swift的反馈和问题报告,所以你甚至有机会参与到这个语言成型的进程当中。
3) Swift暴露出Cocoa不太好的一面
你是否期望获取一个包含多个SKProduct对象的Swift数组?抱歉,Cocoa将返回给你包含AnyObject的隐式解析可选类型的数组(implicitly unwrapped optional array)。
你是否想传递一个[NSObject: AnyObject]类型的Swift数组给对应的方法?抱歉,Cocoa真正想要的是一个NSDictionary,或者一个会导致静默失效(silently fail)的东西。
你能够感觉到Swift和Cocoa之间的紧张气氛:Swift想要做某件事,但它不得不为了适应Cocoa而做折衷。我们必须面对这样一个事实,从Swift透镜来看Cocoa并不总是漂亮的!

这里有一个坏消息和一个好消息。
坏消息是我们正处在一个过渡当中,苹果在每次Swift/Xcode升级中所做的一部分事情,就是清理Swift-Cocoa的接口,来让它们更好的兼容。
好消息是苹果很善于过渡,你可以回想一下从PowerPC到Intel处理器的过渡、经典Mac OS到OS X的过渡等等。未来的某一天,Cocoa也将会原生的完美支持Swift语言。
2) Swift和Objective-C是幸福的一对
真的,这是我之前观点的一个必然推论 – 你可能觉察到Swift某些地方挺怪异,是因为它需要在Objective-C runtime和Objective-C API下工作,所以只能做出妥协。

从实际开发来看,在我的Swift app里使用Objective-C第三方类库和扩展非常简单,我只需要将它们的头文件导入到我的bridging header,它们就能正常工作了。
如果你有一个喜欢的库是用Objective-C编写的,或者已有的app,你想要在它们当中添加一两个Swift类,这不是个什么大问题。
1) Swift非常好玩
我很享受和Swift一起玩耍工作的日子。
它极富表现力。像自判断链接(optional chaining)和nil coalescing特性能让你写出更短的代码。让我最惊讶的是枚举类型给我带来的享受 – 它的确是一个双赢,让你代码更具可读性,还包括附加的好处比如类型检查和实例穷举检查。

作为Objective-C和Ruby的粉丝,我觉得Swift就像集合了这两种语言优点的混血儿。如果你学过Objective-C和Cocoa,阅读起Swift代码将没有任何困难,如果你还没有开始学习,那么就从现在开始用Swift开发一个简单的应用吧!
附加感受:Extension将改变世界!
至少对于苹果的世界是这样。在iOS 8里,苹果引入了app extension,允许开发者通过app扩展实现自定义分享选项、通知、键盘以及照片。
在Instant Poetry 2里,我使用了一个Photo Extension,让用户能够直接在Photo应用里添加词句到图片上。在这iOS 8以前是不可能做到的。

应用们从此不再被局限在自己的sandbox里了,貌似新的开放的苹果将让app能够从更多的地方做更多的事情,这是多么美好的事啊。
即便是即将到来的Apple Watch,它也是iPhone屏幕的一个扩展,我等不及想知道我们到底能用Watch Kit来做些什么。
也许我下个Swift app将是和Apple Watch有关呢!~
那么未来将是什么样的?
我的预测是,Swift的一些粗糙的地方将在短时间内被反复打磨。很快,Swift开发的应用将会无处不在,并且在Github上,Swift项目将远远超过Objective-C。
不过如果你现在开始开发Swift应用的话,你将会面临一些挑战。由于Swift的快速演变,我认为Swift 1.0项目迁移到Swift 2.0需要做不少工作,虽然比起从Objective-C迁移到Swift肯定要轻松一些。
不过这也正是我们热爱科技的原因,不是吗?学习新知识、跟上潮流、使用最新最好的语言和API,这些能让我保持兴奋。

最后,如果你想看看Instant Poetry 2能做什么,你可以从App Store免费下载。
你是否已经开始你的Swift开发旅程呢?如果是的话,我想听听你的体验看法。
原文:Four Things I Learned Making My First Swift App 译文:cocoachina
IT江湖 swift专栏
我在开发第一个Swift App过程中学到的四件事的更多相关文章
- 在开发第一个Android应用之前需要知道的5件事:
你能否详细讲述一下,在开发Android应用过程中每一阶段要用到的技能和编程语言? 建立一个Android应用程序可以归结为两个主要技能/语言:Java和Android系统.Java是Android的 ...
- 把一个整体目标设置成多个分阶段目标,完成了一个目标后,就相当于一件事OVER
如果事情有变坏的可能,不管这种可能性有多小,它总会发生 . 一.任何事都没有表面看起来那么简单:二.所有的事都会比你预计的时间长:三.会出错的事总会出错:四.如果你担心某种情况发生,那么它就一定会发生 ...
- VS2015下的Android开发系列02——用VS开发第一个Android APP
配置Android模拟器 这算是第一篇漏下说的,配置好VS的各参数,新建Android项目后,会发现菜单下的工具栏会多出Android相关的工具栏,红色圈出的就是AVD. 打开AVD后可以从模版处选一 ...
- 想做Android Wear开发?你得先搞明白这四件事
手环和手表的腕上穿戴之争,随着Apple Watch发布和Android Wear不断完善而告一段落.尽管续航上略有缺陷,但手表以其类似手机可扩展的生态环境赢得了众多巨头的支持. Google曾透露, ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装
UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...
- iOS之在写一个iOS应用之前必须做的7件事(附相关资源)
本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者:@NIkant Vohra 原文:7 Things you must absolutely do befo ...
- 【转】在写一个iOS应用之前必须做的7件事(附相关资源)
转自:http://www.cocoachina.com/ios/20160316/15687.html 本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者: ...
- 在写一个iOS应用之前必须做的7件事
转载自:http://www.cocoachina.com/ios/20160316/15685.html 原文:https://medium.com/ios-os-x-development/7-t ...
随机推荐
- hdu 4602 递推关系矩阵快速幂模
Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- APUE 学习笔记(五) 进程环境
1.main函数 C程序总是从main函数开始执行,当内核执行C程序时,在调用main函数之前先调用exec函数从内核获取命令行参数和环境变量值 2.进程终止 正常终止: (1)在main函数内执 ...
- udp 多播
先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一 ...
- PE+ 1.0 ( Pump Express Plus 1.0 )
Dialog iW1788 for PE+ 1.0 Dialog iW1680 for PE PE+1.0 for up to 15W battery, improve charging time, ...
- Codeforces 246E Blood Cousins Return(树上启发式合并)
题目链接 Blood Cousins Return #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) f ...
- HAXM 6.0.5显示不兼容Windows
HAXM 6.0.5显示不兼容Windows 最近更新Android后,用户会在Android Manager中发现,以前可以安装Intel x86模拟器现在不能安装了.提示错误信息如下:intel ...
- mac 安装opencv-python
Mac下安装opencv-python 项目中使用的是opencv 2的版本,因此下面说一下opencv2的一些安装流程. 安装方法 1:如果没有homebrew的话,需要先安装 安装命令: ruby ...
- 几点iOS开发技巧
转自I'm Allen的博客 原文:iOS Programming Architecture and Design Guidelines 原文来自破船的分享 原文作者是开发界中知晓度相当高 ...
- 偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试
Intro 虽然“只有偏执狂才能够生存”这句话已经被假药停给毁了,但是作为一只有逼格的高大上的iOS逆向分析研究员,难道如果有现成的macOS/iOS全版本镜像可以下载并且无限“漫游”,难道你就不想来 ...
- 浅析 rand7生成rand10 方法 之 思想篇(一)
[问题描写叙述] rand7是一个能生成1-7的随机数.要求利用rand7生成1-10的随机数. [算法思想] 1.组合数学方法 第1次 1 2 3 4 5 6 7 之中用rand7取一个数 第2次从 ...