本文转载至 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过程中学到的四件事的更多相关文章

  1. 在开发第一个Android应用之前需要知道的5件事:

    你能否详细讲述一下,在开发Android应用过程中每一阶段要用到的技能和编程语言? 建立一个Android应用程序可以归结为两个主要技能/语言:Java和Android系统.Java是Android的 ...

  2. 把一个整体目标设置成多个分阶段目标,完成了一个目标后,就相当于一件事OVER

    如果事情有变坏的可能,不管这种可能性有多小,它总会发生 . 一.任何事都没有表面看起来那么简单:二.所有的事都会比你预计的时间长:三.会出错的事总会出错:四.如果你担心某种情况发生,那么它就一定会发生 ...

  3. VS2015下的Android开发系列02——用VS开发第一个Android APP

    配置Android模拟器 这算是第一篇漏下说的,配置好VS的各参数,新建Android项目后,会发现菜单下的工具栏会多出Android相关的工具栏,红色圈出的就是AVD. 打开AVD后可以从模版处选一 ...

  4. 想做Android Wear开发?你得先搞明白这四件事

    手环和手表的腕上穿戴之争,随着Apple Watch发布和Android Wear不断完善而告一段落.尽管续航上略有缺陷,但手表以其类似手机可扩展的生态环境赢得了众多巨头的支持. Google曾透露, ...

  5. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  6. iOS开发——UI篇Swift篇&玩转UItableView(四)自定义&封装

    UItableView自定义&封装 一:Model class AppsModel: NSObject { //定义模型的三个属性 var imageName:String! //图片名称 v ...

  7. iOS之在写一个iOS应用之前必须做的7件事(附相关资源)

    本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者:@NIkant Vohra 原文:7 Things you must absolutely do befo ...

  8. 【转】在写一个iOS应用之前必须做的7件事(附相关资源)

    转自:http://www.cocoachina.com/ios/20160316/15687.html 本文由CocoaChina--不再犹豫(tao200610704@126.com)翻译 作者: ...

  9. 在写一个iOS应用之前必须做的7件事

    转载自:http://www.cocoachina.com/ios/20160316/15685.html 原文:https://medium.com/ios-os-x-development/7-t ...

随机推荐

  1. c语言第二题

    在我们的业务中经常会遇到很多业务,字符串会有一系列的操作,请写出以下的方法 1.写一个函数,给定char *p,char q,判断char *p中是否包含char q这个字符,包含则返回这个字符的下标 ...

  2. linux .so .a .o 文件

    linux下文件的类型是不依赖于其后缀名的,但一般来讲:.o,是目标文件,相当于windows中的.obj文件.so 为共享库,是shared object,用于动态连接的,和dll差不多.a为静态库 ...

  3. Python日志(logging)模块使用方法简介

    A logger is configured to have a log level. This log level describes the severity of the messages th ...

  4. hdu 5443(线段树水)

    The Water Problem Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  5. poj 3308(二分图的点权最小覆盖)

    Paratroopers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8325   Accepted: 2502 Desc ...

  6. (1)sqlite基础

    一.安装sqlite 下载页面:http://www.sqlite.org/download.html 1.下载 sqlite-tools-win32-*.zip 和 sqlite-dll-win32 ...

  7. ssm框架 spring的主配置文件 spring-mvc主配置文件 web.xml配置文件(基础的配置文件)

    1.spring主配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  8. soursTree新建过程.md

    网上博客 https://www.cnblogs.com/tian-xie/p/6264104.html 主要的推送流程 完成所有项目的远程推送工作 点击git工作流选择第二个建立新的版本; 输入发布 ...

  9. java正则过虑字符

    public static void main(String[] args) { String testrString = "{\"abc\" : \"[123 ...

  10. 【CSS】获取元素的z-index值以及各种值的意义

    js可以获取其元素的z-index值: $("document").ready(function(){ var a = $('.row').css('z-index'); aler ...