关于 Swift 的一点初步看法
本文转自:http://onevcat.com/2014/06/my-opinion-about-swift/
感谢原作者
尽管四点半就起床去排队等入场,结果还是仅仅能坐在了蛮后面的位置看着大屏幕參加了今年的 Keynote。事实上今年 OS X 和 iOS 的更新亮点都不少。可是显然风头和光芒都让横空出世的 Swift 给抢走了。这部分内容由于不是 NDA。所以能够提前说一说。
Swift 是 Apple 自创的一门专门为 Cocoa 和 CocoaTouch 设计的语言,意在用来替代 objc。
早上公布的时候有非常多朋友说事实上他们已经写了非常久的 Swift,并且还给了一个站点,在这里首先须要说明的是,这个站点的 Swift
parallel scripting language 和 Apple 的 Swift 并非一个东西,两者能够说毫无关系。Apple
还在自己的 Swift 介绍页面后面非常友好地放上了 Swift parallel scripting language 的站点链接,以提示那些真的想搜还有一个 Swift 却被 SEO 误导过来的可怜的孩子。
我个人来说,在把玩了 Swift 几个小时之后,深深地喜欢上了这门新的语言。这篇文章以一个刚開始学习的人(事实上如今大家都是刚開始学习的人)的角度来对 Swift 做一个简单的介绍,由于如今大家事实上是在同一个起跑线上,所以理解上可能会有非常多不精确的地方。出错了也请大家轻喷指正。
什么是 Swift
非常多人在看到 Swift 第一眼的感觉是。这丫是个脚本语言啊。由于在非常多语法特性上 Swift 确实和一些脚本非常相似。可是首先须要明白的是,至少在 Apple 开发中,Swift 不是以一种脚本语言来执行的,全部的 Swift 代码都将被 LLVM 编译为 native code,以极高的效率执行。依照官方今天给出的 benchmark 数据,执行时比 Python 快 3.9 倍。比 objc
快 1.4 倍左右。我相信官方数据肯定是有些水分,可是即使这样,Swift 也给人带来非常多遐想和期待。Swift 和原来的 objc 一样,是类型安全的语言,变量和方法都有明白的返回,而且变量在使用前须要进行初始化。而在语法方面,Swift 迁移到了业界公认的非常先进的语法体系。当中包括了闭包,多返回,泛型和大量的函数式编程的理念,函数也最终成为一等公民能够作为变量保存了(尽管详细实现和使用方法上来看和 js 那种传统意义的好像不太一样)。
初步看下来语法上借鉴了非常多 Ruby 的人性化的设计,可是借助于 Apple
自己手中 强大的 LLVM,性能上必需要甩开 Ruby 不止一两个量级。
还有一方面。Swift 的代码又是能够 Interactive 来“解释”运行的。新的 Xcode 中增加了所谓的 Playground 来对开发人员输入的 Swift 代码进行交互式的对应,开发人员也但是使用 swift 的命令行工具来交互式地运行 swift 语句。细心的朋友可能注意到了,我在这里把“解释”两个字打上了双引號。
这是由于即使在命令行中。 Swift 事实上也不是被解释运行的,而是在每一个指令后进对从開始以来的
swift 代码行了一遍编译,然后运行的。这种做法下依旧能够让人“感到”是在做交互解释运行,这门语言的编译速度和优化水平,可见一斑。同一时候 Playground 还顺便记录了每条语句的运行时候的各种情况,叫做一组 timeline。能够使用 timeline 对代码的运行逐步检查,省去了断点 debug 的时间,也很方便。
至于更具体的比方 Swift 的语法之类的,能够參见 Apple 在 iBooks 放出的 The
Swift Programming Language,或者你是开发人员的话,也能够看看 pre-release 的參考文档
Cool。我能够如今就使用 Swift 么?
Swift 作为 Apple 钦定的 objc 的继承者,作为 iOS/Mac 开发人员的话,是认为必须和值得学习和使用的。
如今 Swift 能够和原来的 objc 或者 c 系的代码混用(注意,不同于 objc 和 c++ 或者 c 在同一个 .mm 文件里的混编,swift 文件不能和 objc 代码写在同一个文件里。你须要将两种代码分开)。编译出来的二进制文件是能够执行在 iOS 7 和 iOS
8 的设备上的(iOS 6 及之前的是不支持的)。
尽管我没有尝试过,可是使用新的 clang 对 swift 进行编译的 app 二进制包,仅仅要你的 target 是 iOS 7 及以上的话,应该如今就能够往 App Store 进行提交。
一个非常好的消息是 Xcode 6 中应该是全部的文档都有 objc 和 swift 两种语言版本号了。所以在文档支持上应该不是问题。而依照 Apple 开发人员社区的一贯的跟进速度。有理由相信在不久的将来,Apple 非常可能会果断 drop 掉 objc 的支持,而全面转向 swift。所以,关于标题里的这个问题的答案,我个人的建议是,尽快学习。尽快開始使用。
假设你有一定的脚本语言的基础(Ruby 最好,Python
或者 JS 什么的也非常不错),又比較了解 Cocoa 框架的思想的话,转型到新的语言应该全然不是问题。你会发现曾经非常多 objc 实现起来非常郁闷的事情,在新语言下都易如反掌。
我毫不忌讳地说,在 Apple 无数project师和语言设计天才的努力下。Swift 吸收了众多语言的精华。应该是如今这个世界上最新(这不是废话么),也是最先进的一门编程语言(之中的一个)了。而我觉得,也正是 Apple 对这门语言有这种自信,才会在这么一个能够说公司还在全盛的时候,不守陈规、如此大胆地进行语言的更换。由于 Apple 必然比你我都精于算计,切换语言带来的利益必须远大于弊端,才会值得冒如此大的风险。
在这个意义上来说。今天的公布会就是程序开发业界的一枚重磅炸弹。也必将写入史冊,而你我事实上真的身在当中,变成了这段历史的见证者。
怎样開始?
非常easy,尽管历年的 WWDC 都在 NDA 的控制之下使得我们无法讨论过多的内容,可是这次的 Swift 破天荒地是在 NDA 之外的内容。Apple 已经放出了足够多的资源让我们開始学习。首先是官方的 Swift 的介绍页面,你能够了解一些
Swift 的基本特性和细节。
然后就是从 iBooks 下载 mt=11" style="margin:0px; padding:0px; border:0px; font-style:inherit; font-variant:inherit; font-weight:inherit; line-height:inherit; vertical-align:baseline; text-decoration:none; color:rgb(191,24,39)">Swift
的书籍
标签和Google
上应该会立即充斥满相关的问题和内容。及时跟进,相信和其它开发人员一同从零開始学习和进步,你会非常快上手并熟练使用 Swift 进行开发。
(由于真的。太好用了。你非常难想象我在写一个美丽的闭包或者嵌套函数或者多返回时,那种内心的激动和喜悦...)
总结
这次的 WWDC 能够说是 Apple 之前几年布局的一个汇总和爆发。从一開始的 Mac 整合电话和短信,以及无处不在的 Handoff,到后面的通知中心 widget 和系统 framework 的 extension,以及更甚的 Family Share 等等,能够说 Apple 通过自己对产业链的控制和生态圈的完好。让 iDevice 或者 Mac 的用户粘度得到了前所未有的加强。对一个人来说,可能一台苹果设备之后他会非常easy购买第二台第三台;对于一家人来说,可能一个成员拥有苹果设备之后。其它人也会被宣传和便捷带动。
这是一手妙招,也是
Apple 近期几年一直在做的趋势。
罗马事实上不是一天建成的,在开发语言方面,Apple 事实上也精心打造了非常多年。在语言而言,之前全然没有这方面经验的苹果,毅然决然地选择离开 GCC 阵营,另起炉灶自己弄 Clang 和 LLVM 的布局。而最终在几年来对 objc 小修小补之后来了一次革命性的爆发。
在日进万金的大好时候,抛弃一个成熟开发社区。而转向一种新的编程语言,做出这样的决策,仅仅能说这家公司的魄力让人折服和钦佩。还有一方面,Apple
这么做的还有一个理由应该是吸引很多其它的开发人员增加到 Apple 开发阵营,由于相对于 objc 的语法和学习曲线,Swift 显然要easy非常多,对于其它阵营的开发人员,这也会是一个非常好的入场机会。
正应了这次 WWDC 的宣传语。Apple 已经为我们提供了更好的工具,我们有什么理由不继续我们的征途,实现我们的梦想呢?
Write
the code. Change the world.
关于 Swift 的一点初步看法的更多相关文章
- [转]关于 Swift 的一点初步看法
本文转自:http://onevcat.com/2014/06/my-opinion-about-swift/ 感谢原作者 虽然四点半就起床去排队等入场,结果还是只能坐在了蛮后面的位置看着大屏幕参加了 ...
- swift iOS开发初步使用
使用Xcode6-Beta 创建一个swift空的工程,新建一个UIViewController,语言选择swift. 在MainViewController.swift 添加如下代码,声明变量及cl ...
- 关于js的call()和apply()两个函数的一点个人看法
首先说明一下,call()和apply都是js的内置函数 它的作用是:改变call或者apply函数里面的``第一个参数对象``的指针,使它转向引用它的函数 call()的用法,call(对象,参数1 ...
- ios Swift 之github
1. 软件类 a) 作者集合 http://nondot.org/sabre/ b) swift for facebook SWIFT是一个易于使用的,基于注解的Java来创建勤俭节约序列化类型和服务 ...
- [转]swift 学习资源 大集合
今天看到了一个swift的学习网站,里面收集了很多学习资源 [转自http://blog.csdn.net/sqc3375177/article/details/29206779] Swift 介绍 ...
- swift 学习资源 大集合
今天看到一个swift学习网站,其中我们收集了大量的学习资源 Swift 介绍 Swift 介绍 来自 Apple 官方 Swift 简单介绍 (@peng_gong) 一篇不错的中文简单介绍 [译] ...
- 行走于Swift的世界中(转)
从Swift正式公布到现在,我基本一直在关注和摸索Swift.对于一门新语言来说,开荒阶段的探索自然是激动人心的,但是很多时候,资料的缺失和细节的隐藏也让人着实苦恼.最近几天的感受是,Swift 并不 ...
- Swift初学习
距离swift发布10天了,也简单看了一下swift的语法,个人感觉相对于object-c很是简单明了.Swift的出现并不能说明iOS开发简单了很多,有可能会变得复杂,你需要学习两门编程语言,因为在 ...
- swift 语法 - 以及学习资料
附上一些swift的一下学习资料: 1.Swift语法介绍官方英文版:The Swift Programming Language 2.Swift与Objective-C相互调用Using Swift ...
随机推荐
- pip 安装时报错Double requirement given: numpy==1.12.1....
使用pip install -r requirements.txt 命令批量安装模块时,报错: Double requirement given: numpy==1.12.1 from https:/ ...
- CentOS 7系统添加启动项
CentOS 7系统已经把CentOS 6的 runlevel 系统服务管理替换成了systemd.在 /etc/rc[0-6S].d 下添加启动项已经不能在系统启动的时候自动执行,需要通过新的 sy ...
- Python Challenge 第九关
第九关只有一幅图,上面有一些黑点.网页名字叫:connect the dots.可能是要把这些点连起来. 查看源代码,果然有两个整数集合 first 和 second.并且有个提示:first+sec ...
- webapi net 直接更改协议头
1.直接更改协议头 [HttpGet] public HttpResponseMessage Users() { var sites = new object(); string str = tool ...
- 洛谷 P1784 数独[DFS/回溯]
To 洛谷.1784 数独类似题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行 ...
- java的架构流行阶段
第一阶段:SSM 第二阶段:分布式系统改造,平台化初具规模,各项垂直业务系统搭建上线.产品端极大丰富用户投资.大数据平台研究并使用 第三阶段:SOA治理,使用zookeeper作为注册中心,dubbo ...
- 全局变量 全局函数vue 方法
定义全局变量 原理: 设置一个专用的的全局变量模块文件,模块里面定义一些变量初始状态,用export default 暴露出去,在main.js里面使用Vue.prototype挂载到vue实例上面或 ...
- luogu P1345 [USACO5.4]奶牛的电信Telecowmunication
https://www.luogu.org/problemnew/show/1345 拆点,中间建流量为1的边,跑最小割 #include<cstdio> #include<queu ...
- [笔记]Android 源码编译
问题: 解决方法: 下载地址ftp://ftp.gnu.org/gnu/make/make3.8.2的安装步骤:tar -zxvf make3.8.2.tar.gz在make-3.8.2目录下./co ...
- C# 计算一串字符串算法
工作中遇到一个小问题,就是要做一个类似excel那种的公式的东西,就是A0+A1*B0那样的公式,然后得出结果. 首先,分析. 这不是计算器,计算器要比这个简易,计算器是所按即所得,即你点击+-之类的 ...