swift对比object-c

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重新编辑 ]

时间: 2024-08-02 13:01:10

swift对比object-c的相关文章

ios的swift 与Object-c之后使用的一些变化

首先比较一下,把ViewController当作导航的根试图控制器, Object-c的方法 SZMyViewController *mVC = [[SZMyViewControlleralloc] init]; UINavigationController *nav = [[UINavigationControlleralloc] initWithRootViewController:mVC]; self.window.rootViewController = nav; swift的方法 va

[IOS swift对比oc]

http://www.cocoachina.com/industry/20140605/8686.html WWDC 2014上苹果再次惊世骇俗的推出了新的编程语言Swift 雨燕, 这个消息会前没有半点风声的走漏.消息发布当时,会场一片惊呼,相信全球看直播的码农们当时也感觉脑袋被敲了一记闷棍吧.于是熬夜学习了Swift大法,越看越想高呼 ” Swift大法好!“ 程序员,最讲究的就是实事求是和客观,下面就开始对比两种语言. 首先要强调的是,Swift绝对不是解释性语言,更不是脚本语言,它和Ob

Swift 对比学习 (一)

Swift相对Objective-C来说,有过之而无不及,并与Objective-C无缝混编,可谓利器.在Swift中可以看到不同的编程语言的影子,天下语言一大抄,这样也好,减低了不同语言的学习成本. let 和 var,相比只有var的语言多了个选择,如果变量的值不会被修改,那就用let吧,意图更加明确. var sideLength: Double ,Pascal也是这样声明变量类型,TypeScript也是这样干的,还是比较好接受的. 行尾不用加分号(当然你要非得加也不错),一返C语言家族

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

# 在部署对象存储服务(swift)之前,你的环境必须包含身份验证服务(keystone); # keystone需要MySQL数据库,Rabbitmq服务,Memcached服务; # 内存:4G # 系统:Ubuntu Server-14.04.5 # 安装方法:http://www.jianshu.com/p/9e77b3ad930a # IP地址:192.168.10.55 # 主机名:object 基本环境配置 配置主机静态IP地址 vim /etc/network/interface

1.swift简介

1.Swift 开发快速体验 1.1 目标 playground 快速体验 & 学习资源分享 项目开发快速体验,了解 Swift 基本程序结构 1.2 学习资源 苹果官方博客 https://developer.apple.com/swift/blog/ 苹果官方 Swift 2.0 电子书 https://itunes.apple.com/us/book/id1002622538 2.0 中文版 http://wiki.jikexueyuan.com/project/swift/ 100个Sw

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

JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SDK自带的JSON解决方案NSJSONSerialization,这是一个非常好用的JSON生成和解析工具,效率也比其他第三方开源项目高. NSJSONSerialization能将JSON转换成Foundation对象,也能将Foundation对象转换成JSON,但转换成JSON的对象必须具有如下属性

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

本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 (2)原理.架构和性能 (3)监控 1. 架构 1.1 总体架构 Swift 的总体架构非常的清晰和独立: # 分层(Tier) 组件(Service) 功能(Function) 特性 部署考量 1 访问层(Access Tier) Load Balancer 硬件(比如F5)或者软件(比如HAPro

ios Swift 之github

1. 软件类 a) 作者集合 http://nondot.org/sabre/ b) swift for facebook SWIFT是一个易于使用的,基于注解的Java来创建勤俭节约序列化类型和服务库. https://github.com/facebook/swift 2. 游戏类 a)FlappySwift https://github.com/fullstackio/FlappySwift b) 2048 https://github.com/austinzheng/swift-2048

Swift 命令行工具

Swift 的 REPL (Read-Eval-Print Loop) 环境可以让我们使用 Swift 进行简单的交互式编程.也就是说每输入一句语句就立即执行和输出.这在很多解释型的语言中是很常见的,非常适合用来对语言的特性进行学习. 要启动 REPL 环境,就要使用 Swift 的命令行工具,它是以 xcrun 命令的参数形式存在的.首先我们需要确认使用的 Xcode 版本是否是 6.1 或者以上,如果不是的话,可以在 Xcode 设置里 Locations 中的 Command Line T