今天是个值得纪念的日子:由于苹果的WWDC大会。苹果的每次WWDC(全球开发人员大会)举行都让我们像打了肾上腺素这么兴奋、幸福、惊叹、震撼、深思。
今年也不例外,最关键的是苹果带来了它的一门新开发语言:Swift.
霎时间风起云涌,短短几个小时互联网界掀起了一股谈论Swift的小高潮,假设你不知道Swift,你会觉得这是一件非常丢脸的事情,粑粑。
为了不至于太落后受歧视,我今天也来简单谈谈Swift(不知道为何,国内把它称为雨燕。别这样好吗?这让我想起了 长安铃木的Swift 雨燕汽车)
一、全新Swift编程语言改变了Objective-C复杂的语法,并保留了Smalltalk的动态特性
这是眼下大家公认的对Swift的评价。这里我们来解读一下:
Objective-C:扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,是NeXTSTEP和OpenStep的基本语言。(百度百科上抄的),简单一句话就是:objc主要是开发ios应用的(尤其iphone),由于iphone4火了,所以objective-c也火了。假设硬要说objective-c有多优秀,那倒也不至于,当时nextstep选用它开发,就是由于这货用起来比較方便。
只是尤其是objc的刚開始学习的人,你会发现,这厮刚開始开发不习惯时是在太繁琐了。至少我刚開始接触xcode编程时对objc语法极端的不适应。假设不是xcode编辑器足够的智能,否则让我用记事本写objc代码一定连翔都写不出。譬如我们来看段代码:
myclass *mm=[[myclass alloc] init:[NSString stringByFormat:"%@",@"shenyi"]]; //手敲的,预计有错,懒得检查,没兴趣。
假设换成java事实上就是:
myclass mm=new myclass("shenyi"); //就是这么清新爽洁,不紧绷。
Smalltalk:大叔级程序猿一定有所耳闻,它被称为“面向对象编程之母”,主要被广泛应用于上个世纪80年代,它的出现推动了Objective-C,Actor, Java 和Ruby这些高大上语言的产生。
我们来简单看一下Smalltalk的语法:
1、赋值。 := ,要让变量a=1,则须要a:=1
2、比較。= 譬如来推断变量a是否等于变量b ,这样的比較用于内容比較,非指针,
3、深比較a==b . 这是用来比較指针的,非常纯粹的比較。
对象定义:
在java中或许我们得,int a;String b;float c;
可是在Smalltalk中,仅仅需|a b c| ,既完毕了三个对象的定义,由于Smalltalk也是“接受随意类型的对象”的。后面我们就能理解,为何Swift也是这样的货色,仅仅只是赤裸裸的|a b c |确实不太easy阅读,因此,加了一个var 的keyword。譬如var a=1; 诸如此类
调用函数:
事实上最令我惊讶的是Smalltalk的表达式。
譬如在java中我们要写以下的代码:
假设有个类叫做myclass,里面有个方法是 showName,传入一个字符串,然后赤裸裸的返回。
在java中调用:myclass _mm=new myclass();String a="沈逸"; String b=_mm.showName(a);
大家肯定看得懂,然后我们来看Smalltalk的写法
|a b|.
a:="沈逸".
mm:=myclass new.
b:=mm showName:a.
好吧,大家会发现,smalltalk连"."、","都木有。大家细致体会一下吧,有利于后面我们来理解Swift为何是objc和smalltalk的优生优育品种。
啥叫动态特性?
这句话的第三个知识点是”动态特性“。
所谓的动态特性是指:在执行时才进行关系确定的特性。 也就是说譬如Smalltalk,假设有个变量,这个变量是在执行时才进行它的类型检測和关系绑定的。
所以Smalltalk并不须要事先申明变量的类型,执行时进行系统自己主动检測。
二、关于Swift语言
看这节前,我们内心先默念objective-c和smalltalk,接下来你就不难理解这货为何会这样了。
变量:
var a=1 大家能够看到,smalltalk的动态特性出现咧~~~~
还能够强迫指定类型: var a:Int=1 我们来想一下smalltalk 是这样写的吧
|a|
a:=1(???var a:(Int)=1)
数组和对象:
假设你会javascript,那么恭喜你,你已经会Swift的数组和对象了。看代码:
var mylist=["I","love","you"]; //数组
对象:
var mylist=[
"name":"shenyi",
"sex":"男"
]
循环:
var b=0;
var a= 0
for i in 0..10 {
b+= i
}
这是一目了然的简单。 注意这里有一种".." 另一个是"...", 前者所谓的是前闭后开,后者是前开后闭。啥意思?非常easy嘛
var a= 0
for i in 0..10 {
b+= i
}等同于
var a= 0
for var i=0;i<10;++i{
b+= i
}
函数:
func showname(name: String, age: Int)-> String {
return "我的名字是 \(name), 年龄 是 \(age)."
}
函数定义等同于java中的:
String showname(String name,int age)
同一时候,你还能够通过元组返回多个值
func getusersage(Int,Int,Int){
return (20,23,25)
}
啥叫元组?(可不是元祖蛋糕哦~~)我举个样例:
var dept1=[‘小张‘,‘小明‘]; 代表部门1 中有小张和小明两个同事。
var dept2=[‘小红‘,dept1] ;代表部门2是一个大部门,包括了小红以及部门1的全部同事,共三个人。
事实上 detp1[1]的值是小明。 同理:dept2[1][1]的值 还是小明
好了,这里仅仅做个大概介绍,本文并非教程,错误之处难免。同一时候有个小建议:
1、大家假设真要学Swift,那么请在mac上自行搭建好开发环境边測试边学,网上眼下非常早就放出来的几个Swift目測都有笔误和讲的混淆的地方(我的也一样),学编程最基本的还是要”自己动手,丰衣足食“,看教程看的大概就可以。
2、swift刚出来,大家千万不要觉得objective-c一点不会直接进入swift就能够开发APP了。目測,这和vc和vc.net出来后一样的道理,你假设全然不会vc,那么vc++也不一定会。
3、Swift和objc的交互究竟到达什么程度,我还没试用过,100%兼容我个人觉得眼下是不可能的。
4、当年c#刚出生(2000年),也是通过了多个版本号后開始逐步强大和成熟。Swift不可能由于是苹果的就不须要走这条”曲折的道路“。
5、objc确实有点繁琐,可是不像网上某些教程说的”极为繁琐”,要说替代还为之过早。
6、假设要说Swift的目的,我个人觉得肯定不是苹果为了“减轻开发人员负担,减少学习门槛”而设置的,假设要说性能,或许Swift要更胜一筹,但绝对不是微博上某些“objc喷子”说的比objc高N个档次,个人更觉得Swift可能是苹果进军 1)跨平台 2)穿戴智能设备 3)智能家居等 几个方面或某个方面用的。
正由于objc的一些特性,让非常多android开发人员不愿意转换到哪怕脚踏两仅仅船到ios阵营中(这仅仅是当中一个因素),假设出现了一个swift,或许就不一样了。(仅仅是或许)
7、当然也有种可能是苹果未来的硬件设备会做大的内核更新,或许内部开发也已经使用了Swift语言。由于在Iphone的A6及以上处理器中(iPhone5採用了A6双核处理器),苹果自主设计的内核已经命名为Swift了。
8、有人说苹果是为了和Android竞争。个人觉得这全然不是必需,苹果的产品一向是“硬件和软件的完美结合”这个特性打的天下。苹果更大的着力点应该是在硬件上,不是必需在软件上和人家分高低。
9、非常多人看了一些swift 的教程后,觉得swift抄袭了非常多语言的特性如java、c#、python。 其有用“借鉴”更合适,由于人家是苹果。假设我们这么做了,才叫抄袭。
--------------------------------
关注我的微信公众号,每天成熟一点点
关注步骤:
非常直接的拿出手机->打开微信->点扫一扫,扫以下二维码就可以
幼谈苹果新开发语言:Swift和苹果的用心,布布扣,bubuko.com
原文:http://www.cnblogs.com/mengfanrong/p/3800140.html