幼谈苹果新开发语言:Swift和苹果的用心
今天是个值得纪念的日子:因为苹果的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),因为iphone火了,所以objective-c也火了。如果硬要说objective- c有多优秀,那倒也不至于,当时nextstep选用它开发,就是因为这货用起来比较方便。
不过尤其是objc的初学者,你会发现,这厮刚开始开发不习惯时是在太繁琐了。至少我刚开始接触xcode编程时对objc语法极端的不适应。如果不是xcode编辑器足够的智能,否则让我用记事本写objc代码一定连坨翔都写不出。譬如我们来看段代码:
myclass *mm=[[myclass alloc] initmy:[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 |确实不太容易阅读,因此,加了一个var 的关键字。譬如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
- }
这是一目了然的简单。 注意这里有一种".." 还有一个是"...", 前者所谓的是前闭后开,后者是前开后闭。啥意思?很简单嘛
- 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.net也玩不转
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。 其实用“借鉴”更合适,因为人家是苹果。如果我们这么做了,才叫抄袭。
10、今天我在微博上打一则招聘广告,这么写了:急需IOS开发,需要精通Swift,开发经验一天。 结果有几个网友来告诉我,很想应聘,只不过离开招聘要求还差几个小时。~~~~~~
--------------------------------
关注我的微信公众号,每天成熟一点点,用不同的角度为你解读各种IT世界观
关注步骤:
很直接的拿出手机->打开微信->点扫一扫,扫下面二维码即可
幼谈苹果新开发语言:Swift和苹果的用心的更多相关文章
- ios新开发语言swift 新手教程
http://gashero.iteye.com/blog/2075324 视频教程:http://edu.51cto.com/lesson/id-26464.html
- 苹果新的编程语言 Swift 语言进阶(一)--综述
Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言.Swift语言基于C 和Objective-C语言,除了提供C 和Objective-C语言具有的所有语法功能外,为了编程方便 ...
- 苹果发布【新开发语言】Swift
Swift is a multi-tenant, highly scalable and durable object storage system that was designed to stor ...
- 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
一 基本操作运算 1. 赋值操作 在Swift 中,能够使用赋值操作为一个常量或一个变量赋值,也能够使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其他语言最大的不同是赋值操作除了可以为 ...
- 苹果新的编程语言 Swift 语言进阶(十五)--协议
协议定义了适合某个特定任务或功能需要的方法.属性和其它需求的一个蓝图.协议本身不提供这些需求的实现,它只是描述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描述了一个实现可以 ...
- 苹果新的编程语言 Swift 语言进阶(十四)--扩展
扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能. 扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名 ...
- 苹果新的编程语言 Swift 语言进阶(十一)--实例的初始化与类的析构
一 .实例的初始化 实例的初始化是准备一个类.结构或枚举的实例以便使用的过程.初始化包括设置一个实例的每一个存储属性为一个初始值,以及执行任何其它新的实例能够使用之前需要的设置或初始 ...
- 苹果新的编程语言 Swift 语言进阶(九)--方法和下标
一.方法 方法是与特定类型相关的函数.与属性一样,方法也包括实例方法和类型方法. 类.结构.枚举都能定义实例方法,用来封装或实现给定类型的一个实例相关的功能或特定任务. 类.结构.枚举也能定义与类型本 ...
- 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...
随机推荐
- LeetCode:Convert Sorted Array to Binary Search Tree,Convert Sorted List to Binary Search Tree
LeetCode:Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in asce ...
- jquery实现文件异步上传
前言 这里用了2个JS插件,一个是Jquery原生js,我的版本是jquery-1.7.2.min.js,另一个是jquery.form.js.这个form.js 是关键,不可少哦.另外, 我的服务器 ...
- 20145215实验三 敏捷开发与XP实践
20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...
- Android中的Intent Filter匹配规则介绍
本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity ...
- css平时写的时候注意的
1.如果用absolute的时候一定要注意,bottom如果为)的话,一定要注意上一级的relative是否有height. 2.chrome浏览器,我们需要注意的是width包含了padding,但 ...
- JS截取字符串常用方法
reference:http://www.jb51.net/article/42482.htm 使用 substring()或者slice() 函数:split() 功能:使用一个指定的分隔符把一个字 ...
- 超市管理系统—NABCD模型
1) N (Need 需求) 需求分析: 超市的数据和业务越来越庞大,而计算机就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生.依靠现代化的计算机信息处理技术 ...
- Daily Scrum – 1/6
Meeting Minutes 确认修复了一个bug,即变方的: 分配了以后的任务: 确认将速度写入了用户的设置文件 Burndown Progress part 组员 今日工作 Time ...
- Freemarker-数字默认格式化问题
freemarker在解析数据格式的时候,默认将数字按3位来分割 例如1000被格式化为1,000 这样做看似美观,但在实际操作时候会带来问题.例如我一个页面有一个元素,该元素的值由后台绑定且超过10 ...
- 【Gym 100947E】Qwerty78 Trip(组合数取模/费马小定理)
从(1,1)到(n,m),每次向右或向下走一步,,不能经过(x,y),求走的方案数取模.可以经过(x,y)则相当于m+n步里面选n步必须向下走,方案数为 C((m−1)+(n−1),n−1) 再考虑其 ...