http://www.cocoachina.com/bbs/read.php?tid=204294

WWDC 2014上苹果再次惊世骇俗的推出了新的编程语言SWIFT( 雨燕 ), 这个消息会前没有半点风声的走漏。消息发布当时,会场一片惊呼,相信全球看直播的码农们当时也感觉脑袋被敲了一记闷棍吧( 至少我当时是这样的,连喊三声:“卧槽,妈蛋” )。于是熬夜学习了SWIFT大法,越看越想高呼 ” SWIFT大法好!“

个人愚见:swift语言替代objective-c只是时间问题( 这个时间不会太长 )---扬起大脸迎接喷子们

空说无凭,程序员,最讲究的就是实事求是和客观,下面就开始对比两种语言。
首先要强调的是,swift绝对不是解释性语言,更不是脚本语言,它和objective-c,c++一样,编译器最终会把它翻译成C语言,也就是说编译器最终面对的其实都是C语言代码( 这是千真万确,不容置疑的!!!所以不要看它长的想脚本语言,其实它是比java, c#要高效的多的c语言!!!),但是swift的强大之处在于它站在所有语言的肩膀上,吸取所有语言的精华。

这个系列我们先谈谈几个最基本的语法变化
《一》swift终于放弃了objective-c那幺蛾子般的 [ obj method:x1 with:x2] 的语法,终于跟随了大流,变成了obj.method( )的顺眼模式。虽然对于objective-c的程序员来说,这些[ ]看上去特显酷 , 你们知道就是这个中括弧吓跑了多少c++, java , c#的程序员嘛?所以说这个小小的变化,可以让苹果的开发更平易近人,对有其他开发语言基础的人来说更友好。
   但苹果不会这么自甘平庸,我们知道objective-c里方法的调用有种语法是其他主流语言没有的,那就是标签。我们在使用java, c++, c, c#等语言时,如果使用 rect.set( 10, 20, 100, 500 ), 虽然在写set方法的时候,IDE有提示四个形参的含义,但写完后,鬼知道这句代码中10, 20, 100, 500是啥意思?(我是举了个简单的例子,不要因此怀疑我的智商!)。所以代码的可读性就变的很差, 而objective-c很完美的解决了这个问题 :
  [ rect setX:10 y:20 width:100 height:500 ]
看看!多棒!swift当然不会丢弃这么好的传统, 在swift中是这个样子的
 rect.set( 10, y:20, width:100, height:500 )看看!!!完美吧!
对于调用方法时,标签的使用需要注意以下两点:
1;)全局函数的调用,不可以使用标签

1
2
fun( 11, 22 , 33 ) //正确✅
 fun( n1:11, n2: 22, n3: 33 ) //错误❌

2:  ) 类的函数,第一个参数不可以加标签 。

1
2
rect.set( 100, y:100, width:300, height: 200 ) //正确✅
rect.set( x:100, y:100, width:300, height: 200 ) //错误❌

其实swift中对类的定义和java, c#几乎一样,再也不分头文件和.m文件了。
一个类的定义语法如下:

class Weapon
{
    var name:NSString
    var power:int
    init( name:NSString, power:int )
    {
        self.name = name
        self.power = power
    }
    func shoot( )
}

注意:swift中的语句不需要分号结束( swift在吸引幼齿入swift大法方面无不用其极!)
其次,终于有构造函数和析构函数了!!!objective-c也有?no no no!!!objective-c中才没有构造函数,真正的构造函数是系统自动调用的,而不是强迫程序员去调用。以前要强迫程序员[ [ Obj alloc ] init ], 傻哇? 如果程序员比较笨比较呆忘记写init咋办? 现在终于终于终于系统自动调用了!!!
Weapon weapon = Weapon( name:“人间大炮”, power: 100000000000 )
我才没有写错, 对的!现在和java, c#一样!虽然weapon是一个指针,但不要写那颗星号!!因为这颗星号吓死过好多人!“ 啥?指针?!!啊。。。。。”(吓死了)
c, c++的程序员注意了,这个weapon对象不是分配在栈内存上的, 仍然是alloc出来的, 在堆上呢。

《二》最期待的语法终于加入了!
对于override在java,c++,objective-c中都有问题,举个栗子:

@interface Weapon
-(void)shoot;
@end

@interface Gun : Weapon
-(void)Shoot;
@end

在大项目中经常会遇到这个问题,程序员的本意是希望覆盖父类的shoot ,结果手潮。。。。写成了Shoot , 这既没有语法错误,也没有逻辑错误,结果在
Weapon*  currentWeapon = [ Gun new ];
[currentWeapon shoot ] 中调用的却是父类的shoot方法( 因为子类根本没有覆盖啦,子类大小写不小心写错了 ), 这种小错误如果出现在超大型项目种还真是很难找呢!!现在,swift终于解决这个问题啦! 子类覆盖父类方法的时候,一定要在方法前写上override

override func shoot{
}

这样,编译器一看方法前写了override, 它就会在父类中去查找是否有shoot方法, 如果你写错成override func Shoot, 那编译器就立刻能发现报错啦!

----晚上再写, 不要逼我太紧好吗-------

[ 此帖被xu54在2014-06-05 11:15重新编辑 ]

swift对比object-c的更多相关文章

  1. [IOS swift对比oc]

    http://www.cocoachina.com/industry/20140605/8686.html WWDC 2014上苹果再次惊世骇俗的推出了新的编程语言Swift 雨燕, 这个消息会前没有 ...

  2. 005-多线程-锁-JUC锁-LockSupport【使用、Unsafe、对比Object的wait、底层源码】

    一.概述 在Java多线程中,当需要阻塞或者唤醒一个线程时,都会使用LockSupport工具类来完成相应的工作.LockSupport定义了一组公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能 ...

  3. Java与Swift对比

    本文链接:http://blog.csdn.net/msyqmsyq/article/details/53538159 从Java到Swift还是比较简单的,相比Object-C,Swift和Java ...

  4. Swift 对比学习 (二)

    书接上回,可以作为参数和返回值的函数数型,以及嵌套函数,绝对继承了动态语言的优良传统: 函数嵌套了,那必然少不了闭包问题,Swift的闭包表达式语法也蛮有趣的. { (paraeeters) -> ...

  5. Swift 对比学习 (一)

    Swift相对Objective-C来说,有过之而无不及,并与Objective-C无缝混编,可谓利器.在Swift中可以看到不同的编程语言的影子,天下语言一大抄,这样也好,减低了不同语言的学习成本. ...

  6. swift(Object Storage对象存储服务)(单节点)

    # 在部署对象存储服务(swift)之前,你的环境必须包含身份验证服务(keystone); # keystone需要MySQL数据库,Rabbitmq服务,Memcached服务; # 内存:4G ...

  7. 理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features]

    本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...

  8. 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置

    本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...

  9. iOS开发——网络Swift篇&JSON与XML数据解析

    JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit)   一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...

随机推荐

  1. LB

    LB(LBaaS)及Load Balance as a Service是 Neutron 提供的一项高级网络服务. LBaaS 允许租户在自己的网络中创建和管理 load balancer,load ...

  2. URAL 1732 Ministry of Truth(KMP)

    Description In whiteblack on blackwhite is written the utterance that has been censored by the Minis ...

  3. 有向图的强连通分量——kosaraju算法

    一.前人种树 博客:Kosaraju算法解析: 求解图的强连通分量

  4. hadoop worldcount小程序

    首先在hadoop中建立input文件夹放几个文件,里边写点东西.比如我放了三个,分别写的是 第一个 hello hadoop bye hadoop 第二个 hello world bye world ...

  5. window下对samba的清理操作

    windows清除访问samba局域网密码缓存 1.在dos窗口中输入control userpasswords2或者control keymgr.dll,然后[高级]/[密码管理],删掉保存的该机器 ...

  6. Web-request内置对象在JSP编程中的应用

  7. PAT 甲级 1007 Maximum Subsequence Sum

    https://pintia.cn/problem-sets/994805342720868352/problems/994805514284679168 Given a sequence of K  ...

  8. js阻止冒泡事件和默认事件的方法

    阻止默认事件 function stopDeFault(e){ if(e&&e.preventDefault){//非IE e.preventDefault(); }else{//IE ...

  9. jQuery添加、移除、改变class属性

    jQuery中一般有3个关于改变元素class的函数addClass.removeClass.toggleClass addClass描述: 为每个匹配的元素添加指定的样式类名$('div').add ...

  10. arcgis的炸开多边形功能

    有时候我们使用dissolve工具,或其他操作会将空间不相连的多边形对应的属性合并到一起,如图: 在高级编辑工具中: 有这样一个工具,但是它能满足我的要求,但是他不是批量的,不过它使用起来比较方便. ...