苹果在 OS X Yosemite 和 iOS 8 系统里引入了 Extension 功能。发现了一篇对此讲得挺透彻的博客,以下内容转载自 http://imtx.me/archives/1898.html


看完了 WWDC 14 的视频之《Creating Extensions for iOS and OS X》,差不多可以谈谈 Extensions 了。

我个人认为这是 iOS 和 OS X 发展至今非常具有里程碑意义的一处改进,甚至比 UI 上的改变重要的多。我想简单地谈一下为何 Extensions 这么重要。

Extension 是什么?

首先我们得问,Extension 是什么?这里可能会有很多不同的解释。

一个很明显的例子是便是使用了相同术语的 Firefox 和 Chrome 的 Extension,这两大浏览器提供了非常丰富的 Extension 用于游览器本身以及增强 Web 浏览体验。确切地说,这里的 Exension 是一种 Plugin。

还有一个是 Android 的 Intent,Intent 使 App 可以实现相关 Intent,在系统或者一个 App 里,用户可以自由的选择另一个 App 去完成特定的任务。所以,Android 的 Intent 是一种 IPC(应用程序间的通讯)。

这里的分类有点极端,毕竟浏览器有真正的 Plugin,如 Flash 插件;Android 也有提供 Widget,也更接近系统的 Plugin。在这点上,我可以说 iOS/OS X 的 Extension 也是混合了上面提到的一切:既有 Plugin 的部分(如 Today),也有 IPC 的部分(如 Share、Photo Editing)。

于是让我们就 Extension 简单地理解为:增强系统默认功能,能让 App 之间的协同工作成为可能。

没有 Extension 的日子…

没有现在的 Extenion 之前,iOS 和 OS X 都分别有相似的技术去实现系统的增强以及 App 之前的协作。

对 OS X 来说,它是 Services 和 Scripting,这是 OS X 从一开始就具备的一项特性,通过在应用程序开发框架级别支持 Scripting(默认语言是 AppleScript),让 OS X 支持图形脚本化,从而让这个操作系统具备了无限扩展的能力。

得益于 Scripting 作为技术后端,直接影响了 Alfred 这类 Power Tools 在 OS X 上的流行。然而不管 AppleScript 多么简单,它依然是一门语言,与命令行脚本在本质上属于同一类事物,从而注定了 Scripting/AppleScript 是作为 Power Users 的一项工具,离普通用户比较远。

得益于 Scripting 作为技术后端,直接影响了 Alfred 这类 Power Tools 在 OS X 上的流行。然而不管 AppleScript 多么简单,它依然是一门语言,与命令行脚本在本质上属于同一类事物,从而注定了 Scripting/AppleScript 是作为 Power Users 的一项工具,离普通用户比较远。

然而,Extensions 的支持将改变这一现象,OS X 的扩展能力相比以前得到进一步增强,与此同时,保持了对普通用户的友好。

另外,对于 iOS 来说,在 Extension 之前,iOS 平台实际上早已实现应用程序间的相互通讯。举个最简单的例子,大家可能用过「知乎日报」,也用过「Evernote」,知乎日报就支持把一篇文章保存到 Evernote 里去。当你点了「保存到 Evernote」里后,知乎日报会调用 Evernote,把文章保存好之后,又返回知乎日报。这就是一个完全的 IPC 过程。

Extensions 于 IPC 的不同在于,它是一个系统级而非 App 级的特性。对上面提到的一个例子来说,知乎日报需要明确知道 Evernote,才能把文章保存到它那里去;而通过 Extension,知乎日报不再需要知道 Evernote,也能保存文章了。这个改变是巨大的…

iOS/OS X Extension 的特点:开放,并且安全

对于这项迟来的特性,iOS/OS X 的 Extension 有何特点,Apple 真的允许开发者做各种他们能在其他平台做的事情,而不再限制的非常死吗?

对于这点,我可以说,是的。Apple 不仅开放了足够多的可以开放、供开发者发挥的地方,并且也做到了和用户利益至关重要的一点:保证安全。也就说,在你使用各种 Extensions 操作照片或其他文档的同时,iOS/OS X 会有设计优良的安全机制将 Extension 与对应的文档(或 App 专有的文档)隔离起来,第三方 Extension 只能被访问授权的对象,而对其他与此对象处于同一目录(或 App)下的将无法得到访问。

对于这点安全性上的考虑,Ars Technica 写了一篇很详细的文章《Explaining iOS 8’s extensions: Opening the platform while keeping it secure》来分析,并且与 Android 提供的不是很安全的 Extension 机制作对比(期望能在月末的 Google I/O 得到改进吧~)。强烈推荐对 iOS/Android 安全性感兴趣的同学去读一读。

所以可以说,iOS/OS X 的 Extension 可以说是既完善又安全。当然,现在刚刚推出,还没有太多的 Extension 来证明这一点,就让我们拭目以待吧!

关于 iOS 的输入法

iOS 的输入法也算是一个特殊的 Extension,它和其他 Extension 一样,需要有一个标准的 App Container,需要用户明确去启用它才能使用。

对于输入法来说,安全性有着特别的设计,因为不像其他 Extension 是针对文件进行的安全防护,输入法可是掌握着你输入的那些内容。对此,Apple 提供的输入法模板中,默认是没有网络的支持的,但是如果一款输入法确实需要用到网络(如云词库),那么开发者需要启用它,用户也会得到提示。在这之后,就是用户与开发者的信任关系了:我用你的输入法,我相信你你只用我的输入内容改善词库而不会用做其他用途。

此外,iOS 的输入法还有两个硬性规定:

  • 输入法必须提供切换到其他输入法的按钮:这点很重要。我可以在一些我觉得特别的地方不使用你的输入法,而能方便地切换到我想要的输入法。
  • 如果一个文本框要求为 secure(如密码框),那么系统会强制使用系统默认的输入法来进行输入,而不是第三方输入法。

有这两点很重要,因为用户总能方便地切换到其他输入法,那么第三方输入法就不能霸占这个系统,与此同时,用户不必担心密码类的会被输入法记住。

关于 Safari 的 Action

Safari 和 Chrome 及 Firefox 一样,在这之前也提供了 Extension 的支持。然而,通过 iOS/OS X 新增的这个系统级 Extension,Safari 可以走的更远了。这部分的 Extension,叫 Safari Action。

简单的说,现在你可以通过你的 App 来分发一个扩展,首先你的 App 是一个完整的 App,其次你的 App 还可以提供一个扩展,用于辅助或增强 App 原有的功能。

比如说,1Password,用过 Mac 版(或 Windows 版)的同学都知道,你可以在浏览器里通过扩展来为你的网站填密码,但是这一功能因为此前 iOS 系统的限制而无法做到。但是在 iOS 8 里面,1Password 将完全有能力像桌面版一样,为你的 Safari 自动填写密码、用户信息等等。这个 Safari Action 的支持可以说是非常实用的。iOS 上浏览 Web 的体验将因此得到增强。

一个鲜活的例子

由于 iOS 8 的测试版本刚刚发布两周,现在还没有什么可用的第三方 Extension 可供演示的,那么我来挑一个非常有用的 OS X 的内置 Extension 来演示吧。

可能大家还记得 WWDC 14 上演示的 Mail.app 支持直接编辑邮件附件的一个功能吧。当时我看了这个就觉得 OS X Yosemite 正式发布后,我一定要开始用 Mail.app。后来我了解到,这项功能实际上是独立于 Mail.app 的,没错,它就是 Extension —— Markup(标记)。

比如,我在 TextEditor 里面写文章,我插入了一张图片。

这时我想给这张图片加一行文字标记,而不是回到源文件用其他 App 去编辑它。完成这项任务很简单:把鼠标移到图片上,会冒出一个下拉点击区域,点击它,就会出来:标记。这就是和 Mail.app 一样的功能。

谈谈 iOS 8 和 OS X 10.10 的 Extension

点击它以后,就会有一个漂亮的动画直接在 TextEditor 里面进入编辑状态了,编辑完点完成图片就能立马得到更新。

谈谈 iOS 8 和 OS X 10.10 的 Extension

这就是系统级 Extension 的威力。一个 Extension 就可以使整个系统的 App 得到增强,并且它的使用是那么的无缝,让你觉得这个功能就像是这个 App 的一部分一样。

可以想像,等到 iOS/OS X 上 Extension 多起来的时候,整个系统会像这个例子一样更好的协调工作,App 们各尽其责,生态圈会比现在更好。

将于今年秋季正式推出的苹果 iOS 8 系统里将加入 Widget 功能(Widget,小工具),OS X Yosemite 系统里的 Widget 也将迎来大变更:整合入通知中心。在 TheVerge 看到一篇介绍苹果电脑 Dashboard Widget 历史的文章,简单翻译一下吧:

苹果电脑 desk accessories

一位名叫 Bud Tribble 的前苹果员工提出了 Widget 的最初想法。1984 年,苹果公司 Mac 团队成员 Andy Hertzfeld 根据该想法开发出了「desk ornaments」,后来改名为「desk ornaments」,一键调出计算器、记事便签、小游戏等单一用途的常用小工具。在那个还只能单线程运行的 Mac OS 时代,方便性非常明显。

你可以到这个网页 http://jamesfriend.com.au/pce-js/ 在浏览器里模拟当年的 Macintosh 运行效果,点击左上角的苹果 Logo 就能调出那些小工具列表。注意,当时的 Mac 操作和现在不一样,在菜单上按住鼠标弹出菜单,松开鼠标=点击。

题外话:Mac OS 和现在的 Mac OS X 是不同的系统,不是简写关系。

Konfabulator

在 2005 年苹果正式推出 Dashboard Widget 功能之前,有个小插曲。一款名叫 Konfabulator  的软件能实现「调出小工具」的功能,如上图所示。苹果后来被喷抄袭他的创意,不过,创意这东西,最没门槛了(想到了手机发布会上显摆创意的某情怀大师)。

苹果电脑 Mac OS X 10.4 Tiger 系统里的 Dashboard Widget 功能

2005 年发布的苹果电脑 Mac OS X 10.4 Tiger 系统里,集成了 Dashboard 功能,可以一键调出各种 Widget 小工具。最初只有 14 款 Widget 小工具,后来当然多到数不清了(向第三方开发者开放的)。

Dashboard 一直被设计成把一键调出的  Widgets 小工具浮动显示在当前屏幕上方的一个新图层里,直到 2011 年发布的 OS X Lion 系统,默认在新桌面里显示 Dashboard Widgets。当然你也可以设置让它们像以前一样浮现在当前桌面。

苹果 iOS 8 和 OS X Yosemite 系统里的 Widget

在 OS X Yosemite 系统里,Dashboard 被移到了通知中心,同样一键调出,而且可以从 Mac App Store 下载你想要的 Widgets 了。此外,Dashboard Widget 功能还首次来到 iOS 系统。和 Android 系统上那种固定在桌面上的的 Widgets(桌面小工具)不同,苹果把它们放在了通知中心。而且和 OS X Yosemite 系统的通知中心 Dashboard 也不同,它们在 iOS 8 系统里看上去更像 Siri 的信息卡片式设计。

TheVerge 英语原文

去年,媒体妓者和砖家分析师们吹捧三星最疯狂的时候,我写了篇《为什么我一点也不担心苹果会被三星灭掉》。像三星这种不重视产品设计,靠巨额营销和渠道投入换取销量的做法,早晚会崩盘的。打死我也不信那些做工廉价+系统丑陋臃肿+网络服务简直是灾难+外形呆板且多年不变+价格还真不算便宜的手机能一直这么火下去。

本周看到两篇新闻:

加大屏幕尺寸的 “创新” 之路走到头了,铺天盖地的广告和网络水军也做到了极限,产品却还是老样子(你能说出 Galaxy S3、S4、S5 有多大区别吗?Note 也是)。早年买了三星的用户又到了换手机的时候,你觉得被广告忽悠来的人和举着 “塑料大饼” 打电话的人,忠诚度有多高?连网易这个屌丝喷子聚集且和三星有战略合作的果黑站,评论区都倒戈了。

去年苹果发布 64 位 A7 处理器时,大家以为三星今年能抄来,结果,抄也抄不动了。眼球追踪什么的根本没人用的功能,去年炒烂了今年也没办法拿来忽悠人了。苹果 iPhone 6 还没发布呢,三星的运营利润就能跌掉近四分之一。高端被苹果虐,中低端被中国厂商虐 …… 靠钻市场空白和砸钱营销火起来的爆发户,你还真以为能一直站在泡沫上不掉下来啊。

又看到有人抱怨苹果 iTunes 体积太大,用不到的功能太多。

其实 Mac 版 iTunes 要比 PC 版好得多,而且我很喜欢它的音乐管理功能。但的确,这货太「重」太不像苹果的风格(本来就是苹果收购来的)。

我想,苹果应该会把 iTunes 拆成几个功能单一但更轻量的应用。比如:

  • 一个专门管理和播放音乐的应用(iMusic?)
  • 一个专门浏览 iTunes Store 和下载音乐、电影、App 等商店内容的应用(iStore?)
  • 一个专门负责和 iOS 设备同步的应用(iSync?不过这名字以前被用过了)
  • 一个专门播放电台和 Podcast 的应用(iRadio?)

这样每个功能用起来都更简单轻便,不会再出「为了听首歌启动个几百兆的大软件」的尴尬了。在 iOS 端已经这样布局了,电脑端应该也只是时间问题吧?

苹果应该不会干掉积分墙的。那么多免费应用的开发者靠这东西赚钱,对用户体验的影响又不是那么严重,干嘛得罪人毁掉自己的生态。

降低积分墙对 App Store 的影响倒是很有可能。那只要调整排名算法就行了。

WWDC 2014 开发者大会上,苹果发布了全新的编程语言:Swift。在苹果开发者池建强先生在他的博客详细介绍了 Swift 语言的开发者、开发过程、语言特点等等信息。原文《苹果新贵 Swift 之前世今生》,地址 http://macshuo.com/?p=1125,转载如下:


2010 年的夏天,Chris Lattner 接到了一个不同寻常的任务:为 OS X 和 iOS 平台开发下一代新的编程语言。那时候乔布斯还在以带病之身掌控着庞大的苹果帝国,他是否参与了这个研发计划,我们不得而知,不过我想他至少应该知道此事,因为这个计划是高度机密的,只有极少数人知道,最初的执行者也只有一个人,那就是 Chris Lattner。

从  2010年 7 月起,克里斯(Chris)就开始了无休止的思考、设计、编程和调试,他用了近一年的时间实现了大部分基础语言结构,之后另一些语言专家加入进来持续改进。到了 2013 年,该项目成为了苹果开发工具组的重中之重,克里斯带领着他的团队逐步完成了一门全新语言的语法设计、编译器、运行时、框架、IDE 和文档等相关工作,并在2014年的 WWDC 大会上首次登台亮相便震惊了世界,这门语言的名字叫做:「Swift」。

根据克里斯个人博客(http://nondot.org/sabre/ )对 Swift 的描述,这门语言几乎是他凭借一己之力完成的。这位著名的70后程序员同时还是 LLVM 项目的主要发起人与作者之一、Clang 编译器的作者,可以说 Swift 语言和克里斯之前的软件作品有着千丝万缕的联系。

关于作者

克里斯可以说是天才少年和好学生的代名词,他在 2000 年本科毕业之后,继续攻读计算机硕士和博士。但克里斯并不是宅男,学习之余他手捧「龙书」游历世界,成为德智体美劳全面发展的好学生。之后就是一篇又一篇的发表论文,硕士毕业论文即提出了一套完整的运行时编译思想,奠定了 LLVM 的发展基础,读博期间 LLVM 编译框架在他的领导下得到了长足的发展,已经可以基于 GCC 前端编译器的语义分析结果进行编译优化和代码生成,所以克里斯在 2005 年毕业的时候已经是业界知名的编译器专家了。

注:很多计算机专业的大学生经常问我在大学里学点什么好,看看克里斯就行了。以目前的科技信息开放程度,如果你在自己感兴趣的领域里用心耕耘,再加上那么一点点天分,毕业时成为某一个专有领域的专家应该不是问题。那时就不是你满世界去找工作了,而是工作满世界来找你!

克里斯毕业的时候正是苹果为了编译器焦头烂额的时候,因为苹果之前的软件产品都依赖于整条 GCC 编译链,而开源界的这帮大爷并不买苹果的帐,他们不愿意专门为了苹果公司的要求优化和改进 GCC 代码,所以苹果一怒之下将编译器后端直接替换为 LLVM,并且把克里斯招入麾下。克里斯进入了苹果之后如鱼得水,不仅大幅度优化和改进 LLVM 以适应 Objective-C 的语法变革和性能要求,同时发起了 CLang 项目,旨在全面替换 GCC。这个目标目前已经实现了,从 OS X 10.9 和 XCode 5 开始,LLVM+GCC 已经被替换成了 LLVM+Clang。

Swift 是克里斯在 LLVM 和 Clang 之后第三个伟大的项目!

关于语言

2007 年之前,Objective-C 一直是苹果自家院落的小众语言,但是 iOS 移动设备的爆发让这门语言的普及率获得了火箭一般的蹿升速度,截止到今天,Objective-C 在编程语言排行榜上排名第三,江湖人称三哥,大哥二哥分别是 C 和 Java 这样的老牌语言。同时,苹果在 2012 年和 2013 年分别对 Objective-C 进行了大规模的优化和升级改进,增加了各种现代语言的特性,让编写 App 更加容易,更多的程序员投入到了 App Store 的生态圈里……

在这种情况下,苹果公司为什么会发布一门新语言呢?

这个问题没有标准答案,不过我们可以试着去分析一下,谈谈苹果的心路历程……

Objective-C 是 80 年代初 Brad Cox 和 Tom Love 发明的,1988 年乔布斯的 Next 公司获得了这门编程语言语言的授权,并开发出了Objective-C 的语言库和 NEXTSTEP 的开发环境。后来 Next 被苹果收购,Objective-C 阴差阳错成了苹果的当家语言。掐指一算,三十年倏忽而过,OC 也成长为爷爷辈儿的编程语言了。

为了伺候好这位「爷爷」,苹果煞费苦心,把 GCC 的编译链先替换成 LLVM +GCC,又替换成 LLVM+Clang,做语法简化、自动引用计数、增加 Blocks 和 GCD 多线程异步处理技术……终于,OC 在 30 年后重新焕发出勃勃生机,并占据了兵器谱排名第三的位置。但是,苹果却有点烦了,OC 改进了这么多年,怎么看都像是在修修补补,用 Blocks 去实现一个类似 Python 的 lambda 闭包功能,看起来总是那么别扭。好吧,既然已经全盘掌握了 LLVM 和 Clang,为什么我们不去基于现在的编译器设计一门全新的语言呢?一门属于苹果的语言!你看,邻居谷歌家里叫做 Go 的孩子不是玩耍正酣么?

于是 Swift 诞生了……

当然,事实的真相也可能是行动缓慢的乔老爷子把克里斯拉到一边说:

「I want to be swift to……」

「 行了,您别说了,不就是想要 swift 吗,我这就给您做一个去」

于是 Swift 诞生了……

语法

Swift 是一门博采众长的现代语言,在设计的过程中,克里斯参考了Objective-C,Rust,Haskell,Ruby,Python,C# 等优秀语言的特点,最终形成了目前 Swift 的语法特性。我在阅读了官方教程和做了些代码实验之后,自我感觉会喜欢上这门语言,在这里简单谈点感想,更深入的内容需要你们自己去深入学习。

1、Swift 是面向 Cocoa 和 Cocoa Touch 的编程语言,编译型语言,生产环境的代码都需要 LLVM 编译成本地代码才能执行,但是 Swift 又具备很多动态语言的语法特性和交互方式。

2、Swift 是一门类型安全的语言,可以帮助开发者清楚的掌控代码片段中的值类型。如果你期望输入的是字符串,类型安全的特性会阻止开发者错误地为其传递一个整数。这一切使得开发者能够更早的发现和修复错误。

3、支持各种高级语言特性,包括闭包、泛型、面向对象、多返回值、类型接口、元组、集合等。

4、Swift 能与 Objective-C 进行混合编程,但代码分属不同的文件。

5、全面的Unicode支持,你甚至可以用一只「狗」作为变量名,实现以下操作:

let 狗 = "大狗菠萝"
for n in 狗{
    println( n )
}

控制台会输出「大狗菠萝」四个字。

6、编程语句取消了大部分语言使用的「;」分隔符,只有一行写多条语句时才需要分号。

7、很多人简单阅读了 Swift 的数据类型,就认为 Swift 没有类似 Set、List 这样的数据结构,其实Swift 提供了两种 Collection 的数据类型:数组(Array)和字典(Dictionary),两个数据类型的表达式都用中括号标识。其中数组可以存储任意类型的变量,也可以强制声明存储同一种类型的变量。同时数组提供了类似 Set 功能,你可以修改、追加、替换和删除数据的元素。另外,Swift 还提供了元组(Tuple)的功能支持函数多返回值。

8、Swift 没有提供显式的指针,参数传递根据数据类型的不同分为值类型和引用类型,值传递进行内存拷贝,引用传递最终传递的是一个指向原有对象的指针。这一点和 Java 的参数传递是类似的。需要注意的一点是,Swift 里的数组和字典虽然都是结构体(struct),但在参数传递过程中处理方式却不一样,默认 Array 是引用传递,Dictionary 是值传递。而在 Java 中,由于数组和 Map 都是对象,所以传递的都是指针。

在 Swift 中,如果你不想传递数组引用,可以用 copy() 方法先复制一份出来,另外,也可以用 unshare() 表示,本变量不传递指针。

9、闭包,Swift 终于提供了一种优雅的闭包解决方案,比如在排序函数 sort 中进行函数传递:

let names = ["D", "B", "R", "C", "A"]
func backwards(s1: String, s2: String) -> Bool {
    return s1 > s2
}
var rnames = sort(names, backwards)

事实上更简单的写法是:

var rnames = sort( ["D", "B", "R", "C", "A"] ) { $0 > $1 }

10、可选变量(Optional)的引入主要是为了应对一个变量可能存在也可能是 nil 的情况,这种情况在很多高级语言里都存在。比如你想使用String的toInt方法将String转化为 Int 类型,但是你并不知道这个转化是否正常,这时候系统会返回一个可选变量,如果转换成功就返回正常值,转换失败就返回 nil,如下:

let str = "123A"
let nn = str.toInt()

这是 nn 就是可选变量,想得到 nn 的值,可以通过 if 进行判断并通过追加感叹号获取变量值,如下:

if nn {
    println(nn!)
}

可选变量的引入解决了大部分需要显式处理的异常,这部分工作也扔给编译器去做了。想了解更多可选变量的用法,请阅读苹果的官方文档。

11、Swift 中的 nil 和 Objective-C 中的 nil 不同。在 Objective-C 中,nil 是指向不存在对象的指针,而在 Swift 里,nil 不是指针,它表示特定类型的值不存在。所有类型的可选值都可以被设置为nil,不仅仅是对象类型。

12、Swift 没有从语言层面支持异步和多核,不过可以直接在 Swift 中复用 GCD 的 API 实现异步功能。另外没看到 Swift 的异常处理机制,可能有了可选变量,异常的使用会非常少吧。

关于语法相关的内容,先写这么几点吧。给大家推荐一篇王巍 (@onevcat)写的「行走于 Swift 的世界中」,深入阅读必有收获。 http://onevcat.com/2014/06/walk-in-swift/

基本上,Swift 绝对不是玩具语言,而是一门可以被大众接受的工业级编程语言。相信假以时日,Swift 必将在 App 开发领域大放异彩。

性能

Swift 在 WWDC 上展示出来的性能还是让人非常吃惊的,在进行复杂对象排序时,OC 的性能是 Python 的 2.8 倍,Swift 是 Python 的 3.9 倍;在实现 RC4 加密算法的时候,OC 的性能是 Python 的 127 倍,Swift 是 Python 的 220 倍。总之 Python 在某一个深坑里膝盖中箭了,OC 也没好到哪去,而 Swift,就是快啊就是快!

对于这一点我并不是很理解,首先是 WWDC 上展示的语言层面的基准测试过于简单了,另外,OC 和 Swift 都是被 LLVM 编译成本地代码执行的,理论上针对 Swift 的优化同样可以应用于 OC,但是 Swift 居然比 OC 快那么一点点,难道 LLVM 单独针对 Swift 做了优化么?我表示不明觉厉。

当然,还有更较真的程序员,他在第一时间针对于循环、递增、数组、字符串拼接等功能进行了测试,发现 Swift 的性能比 OC 还是差那么一点点的(http://www.splasmata.com/?p=2798)。

无论这些测试数据是否准确,我觉得性能是我们最不需要担心的问题,苹果已经全盘掌握了这个语言的方方面面,从底层编译框架到编译器再到语言设计,优化之路才刚刚开始,我们只要给这门新语言一点耐心就可以了。

所码即所得(Playground)

苹果 Swift 所码即所得

对于开发者来说,Playground 是本次 WWDC 最大的亮点。能够在编码的同时实时预览输出结果是每个开发人员的梦想,这一次苹果为大家提供了这样的福利。

Playground 不仅实现了很多脚本语言支持的交互式编程,而且提供控制台输出、实时图形图像、时间线(timeline)变量跟踪等功能,开发者除了可以看到代码的实时运行结果,还能根据时间线阅读某个变量在代码片段中值的变化。这真是太棒了!

最初看到这个功能的时候我甚至以为每个 Swift 文件都可以基于 Playground 进行实时编码预览,仔细阅读文档后发现,只能在 XCode 提供的 Playground 文件中实现以上功能。看来 Playground 顾名思义,目前还只是为开发者提供了一个玩耍代码的地方。

当然不仅仅是玩耍,我们可以基于 Playground 做这些事情:

1、学习:通过 Playground 学习 Swift,制作 Swift 教程实现交互式学习,同时还可以培训其他初学者。

2、代码开发:执行算法程序,迅速看到算法结果,跟踪变量;执行绘图程序,即时看到图像结果,及时调整。执行通用代码,查看变量的改变情况。

3、实验性代码:无需创建项目,直接打开一个独立的Playground文件即可编写代码,尝试调用新的 API。

对于 Playground,设计者克里斯是这样描述的:Playground 功能倾注了我个人很多心血和激情,我希望新的编程语言具备更好交互性,更友好和有趣……我们希望通过这门语言重新定义「如何教授计算机科学!」

开始使用 Swift

作为一门新语言,Swift 定位非常明确,就是吸引更多的开发者加入苹果的软件生态圈,为 iOS 和 OS X 开发出更为丰富的 App,如果你是 App Store 的开发者,推荐尽早学习和掌握这门苹果力推的新语言。对于大部分新事物来说,越早介入,获利越多。如果你是一名 Web 相关的开发者,与其等待 Swift 增加 Web 开发的相关特性,还不如去学习一下 Go 语言 Web 编程。

如何开始 Swift 呢?

1、下载 Xcode6-Beta 版本。

2、下载苹果官方提供 Swift 编程语言电子书(https://itunes.apple.com/cn/book/swift-programming-language/id881256329?mt=11),中文版本:http://yuedu.baidu.com/ebook/6f6c3b1ef01dc281e43af000。读。

3、下载 WWDC Swift 的 Session 视频和PDF。看。

4、基于 Xcode6创建 Swfit 语言的项目,在项目中创建Playground,在其中调试玩耍。

5、根据官方提供的 GuidedTour.playground 学习 Swift 语法特性。下载地址: https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/GuidedTour.playground.zip

6、熟悉了基本的语法特性、与 OC 的混用、与 Cocoa 和 Cocoa Touch的交互、调试等功能之后,就可以构建你的第一个Swift App 了。

可以说 Swift 是我所见过关注度最高的新语言,一经推出即万众瞩目,媒体和开发者在数天之内对 Swift 进行了长篇累牍的报道和讨论,英文手册迅速被翻译成中文,即使是江湖上的另一位大佬谷歌 2009 年推出 Go 语言时也没有如此浩大的声势。当然,这和 Go 语言的定位有关,作为一门系统级的服务器端语言,开发者的可选余地太大了,如果谷歌推出 Go 是用来取代 Java 开发 Android App,那可能情况就完全不一样了。

经过 WWDC2014,苹果已经完全体现出了一个软件公司的创新能力和技术底蕴,无论是操作系统,编程语言,还是应用开发,苹果都已经准备好了,凝神静气,蓄势待发。作为开发者,我们要做的就是:Write the code, Change the world,然后期待下一个收获的季节!

分页: 8/46 第一页 上页 3 4 5 6 7 8 9 10 11 12 下页 最后页 [ 显示模式: 摘要 | 列表 ]