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, 那编译器就立刻能发现报错啦!
----晚上再写, 不要逼我太紧好吗-------
swift对比object-c的更多相关文章
- [IOS swift对比oc]
http://www.cocoachina.com/industry/20140605/8686.html WWDC 2014上苹果再次惊世骇俗的推出了新的编程语言Swift 雨燕, 这个消息会前没有 ...
- 005-多线程-锁-JUC锁-LockSupport【使用、Unsafe、对比Object的wait、底层源码】
一.概述 在Java多线程中,当需要阻塞或者唤醒一个线程时,都会使用LockSupport工具类来完成相应的工作.LockSupport定义了一组公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能 ...
- Java与Swift对比
本文链接:http://blog.csdn.net/msyqmsyq/article/details/53538159 从Java到Swift还是比较简单的,相比Object-C,Swift和Java ...
- Swift 对比学习 (二)
书接上回,可以作为参数和返回值的函数数型,以及嵌套函数,绝对继承了动态语言的优良传统: 函数嵌套了,那必然少不了闭包问题,Swift的闭包表达式语法也蛮有趣的. { (paraeeters) -> ...
- Swift 对比学习 (一)
Swift相对Objective-C来说,有过之而无不及,并与Objective-C无缝混编,可谓利器.在Swift中可以看到不同的编程语言的影子,天下语言一大抄,这样也好,减低了不同语言的学习成本. ...
- swift(Object Storage对象存储服务)(单节点)
# 在部署对象存储服务(swift)之前,你的环境必须包含身份验证服务(keystone); # keystone需要MySQL数据库,Rabbitmq服务,Memcached服务; # 内存:4G ...
- 理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features]
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
随机推荐
- 【个人训练】(ZOJ3983)Crusaders Quest
题意分析 和祖玛类似的那种玩法.不过是限定了九个字符,问最好情况下有几次三连碰. 暴力穷举即可.具体的做法是,先把所有"成块"的字符记录下来,然后一个一个删,再继续这样子递归做下去 ...
- SQL SERVER 的操作复习
一.数据库的创建(SQL语句)CREATE DATABASE AON PRIMARY --主文件组( NAME='A_data',--逻辑文件名 --物理文件名 FILENAME=' ...
- 01-Mysql数据库----前戏
MySql的前戏 在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中: #用户名 |密码root|123321 alex|123123 上面文件内容的规则 ...
- 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6
孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...
- 剑指offer-斐波那契数列07
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 class Solution: def Fibonacci(self ...
- LLLYYY的数字思维(模拟题)
链接:https://ac.nowcoder.com/acm/contest/318/G LLLYYY很喜欢写暴力模拟贪心思维.某一天在机房,他突然抛给了队友ppq一 个问题.问题如下: 有一个函数f ...
- LeetCode 82 ——删除排序链表中的重复元素 II
1. 题目 2. 解答 新建一个链表,并添加一个哨兵结点,从前向后开始遍历链表. 如果下一个结点的值和当前结点的值相等,则循环向后遍历直到找到一个和当前结点值不相等的结点: 反之,如果下一个结点的值和 ...
- 阿里云服务器安装https证书 centos + httpd + Symantec
一. 环境 centos7 阿里云服务器, httpd服务, 阿里云免费的Symantec证书 阿里云Symantec 有个免费版的证书, 具体怎么申请可以去百度解决 二. 网上大部分的经验贴都是要A ...
- [leetcode-636-Exclusive Time of Functions]
Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...
- ACM做题随做随思
程序停止运行:数组开太大: 输入一串单词,可以“string s; while(cin>>s){//代码块}”,因为cin>>s遇到空格会停止: map<key,valu ...