苹果新的编程语言 Swift 语言进阶(一)--综述
Swift 是苹果开发和提供的供开发IOS 和OS X应用的一门新的语言。Swift语言基于C 和Objective-C语言,除了提供C 和Objective-C语言具有的所有语法功能外,为了编程方便和高效,Swift在语法上作了大量的优化和改进。
Swift采用安全编程模式,具有许多先进的强大的功能 ,如动态运行时、编译动态进行类型检查、Closures、下标功能、自动引用计数、选项类型、通用类型和类型编译时推断、类型的扩展和嵌套、协议类型、功能和类型的通用化、操作符的定制和添加。
Swift语言的设计思想是:语言和编译器承担不同的职责,语言本身承担程序语义的呈现,为程序编写服务,为提高编程效率进行了最大程度的优化;而编译器承担语言的理解和编译职责,对程序的执行效率和性能进行最大程度的优化。
因此Swift语言在设计时在保持语义可理解的基础上为了提供编程效率在语法上做了最大程度的优化,使语言本身更加干净和简洁,功能更加强大、更富有表现力,并不失灵活性,如实现了语言语法上的面向对象和过程化部分的有机统一、去除了c 语言的语法上的诸多限制等。
Swift语言通过语言和编译器两方面的优化使 采用Swift 语言进行编程更加容易、编程效率更高,同时程序的 执行效率和安全又得到保证。
一、Swift语言的简洁性、灵活性
Swift语言为了保持语言的简洁在语法的各个方面(包括程序结构、关键字等)进行了优化,在不失理解性的基础上去除了冗余的语法,能够交给编译器的工作尽量交给编译器处理。
如 每个语言实现的第一个程序,打印一条"Hello, world”。
Swift语言为了实现上述功能只是下面的一条语句。
println("Hello,
world”)该语句在Swift语言中就是一个完整的程序 ,不需要输入另外的分离的库和头文件,也没有通常语言都有的main 函数声明,就连语句最后的分号也省略了。
Swift语言也没有C语言通常的头文件,所有的实现和声明都在一个后缀为.swift的文件中,这也是为了提高编程效率的需要,不需要用户维护两个文件。对于其它代码需要的某个类的接口可以自动获得和使用。
Swift语言对关键字的命名在不失准确性的基础上也是尽量的简化,如整数类型为Int,而不是Integer,布尔类型是Bool而不是Boolean等。
Swift语言对循环语句添加了for-in形式,使其更加容易地对数组、词典、范围、字符串和其它序列进行遍历。
为了语言的干净,包围条件和循环变量的圆括号也被省略了。
如:
for (kind,numbers) in interestingNumbers
{for number in numbers
{if number
>largest {largest =number
}
}
}
对于Switch控制结构也作了语法的简化,为了语法的简洁和更少的的出错,在每个对应Switch的case的执行代码执行完后,程序自动退出switch语句,不再继续执行下面的case 语句,因此不需要在每个case对应的执行代码后添加一个冗余的break语句。而其它语言如C语言需要在每个case
语句后面添加多余的break语句,用户也经常会忘记添加这个多余的break语句,因此造成程序逻辑出错。Swift语言虽然在语法上进行了去冗余化工作,但在语法功能上却没有精简,反而大大增强了功能,除了支持C语言和Objective-C语言的几乎所有功能外,还添加和增强了许多功能,如下标功能、元组类型、选项类型、类型的扩展和嵌套、功能和类型的通用化、操作符的定制和添加等许多功能。
另外Swift语言更加灵活,相对c 语言或其它语言具有更少的语法限制。如
Swift语言的注释像c 语言一样支持以//开始的单行注释,也支持/* */形式的多行注释。但没有了c 语言对多行注释不能嵌套的限制,Swift 的多行注释支持嵌套。如下所示 :
/* this is the start of the first multiline comment
/* this is the second, nested multiline comment */
this is the end of the first multiline comment */
Swift还支持使用println功能或print直接打印一个变量或常量的值,或者插入一个字符串类型中进行输出。。
var friendlyWelcome =“Hello!"
println(friendlyWelcome)
或
println("The current value of friendlyWelcome is\(friendlyWelcome)”)。
总之,Swift语言在语法语句上虽然与C语言相似,但在语法的许多方面作了许多精简和增强,可以说Swift语言是C语言的精简化、Objective-C语言的功能增强化,并且具有脚本语言的表达化等特点,因此Swift语言是一门语法更自然,表达更丰富的语言。
二、Swift语言的安全性和语义清晰性
Swift是一门类型安全的语言,即在编译阶段必须进行类型检查明确使用到的每个变量或常量的类型。类型安全的语言可以在开发编译阶段更好的发现和修改类型使用上的错误,可以开发一个更加安全可靠的程序。
Swift在编译代码时进行类型检查,但不意味着必须为每一个声明的常量或变量规定类型。
Swift编译器提供了类型推断机制--编译代码时,通过简单检查你提供的表达式的值自动推断表达式的类型。
由于Swift使用类型推断,Swift可以提供比其它语言更简洁的类型声明语法,虽然语法简洁,但类型仍然能够在编译阶段被明确确定。Swift的编译器推断类型功能在Swift语言要求的类型安全与语法的简洁上做到了最好的统一。
如当你使用一个初始值来声明一个常量或变量时,Swift编译器能够自动根据变量或常量的初始值来推断变量或常量的类型。
let maximumNumberOfLoginAttempts
=10var currentLoginAttempt
=对于上面的对maximumNumberOfLoginAttempts常量和currentLoginAttempt变量的声明,Swift能够推断其为Int类型。
let pi = 3.14159
上面语句Swift推断你想创建一个Double类型的常量。Swift总是推断一个浮点数的类型为Double。
如变量或常量在声明时没有提供初始值,使Swift编译器不能推断其类型,就需要明确的为其指定类型。如下所示,声明一个字符串类型的变量。
var welcomeMessage: String
因此Swift还是一门语义更加安全、更加清晰的语言。
苹果新的编程语言 Swift 语言进阶(一)--综述的更多相关文章
- 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
一 基本操作运算 1. 赋值操作 在Swift 中,能够使用赋值操作为一个常量或一个变量赋值,也能够使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其他语言最大的不同是赋值操作除了可以为 ...
- 苹果新的编程语言 Swift 语言进阶(十五)--协议
协议定义了适合某个特定任务或功能需要的方法.属性和其它需求的一个蓝图.协议本身不提供这些需求的实现,它只是描述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描述了一个实现可以 ...
- 苹果新的编程语言 Swift 语言进阶(十四)--扩展
扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能. 扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名 ...
- 苹果新的编程语言 Swift 语言进阶(七)--枚举、结构、类
Swift语言中,具有类特征的类型包括三种,即枚举类型.结构类型(包括基本类型,基本类型实际都是结构类型的特例).类.其中枚举类型.结构类型是属于值类型,类属于引用类型.三种类型都可以添加属性.方法. ...
- 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
一.字符串( String )和字符类型(Character) 字符串是一种字符的带次序的收集类型(相当于数组),字符是字符串中的元素. 在Swift 语言中,字符串是编码独立的Unicode字符的 ...
- 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型
一 . 常量和变量 Swift语言 对常量和变量的声明进行了明确的区分 Swift语言的常量类型比C 语言的constants类型更加强大,语义更加明确. 常量和变量的区别是常量在设置或初始化后 ...
- 苹果新的编程语言 Swift 语言进阶(五)--控制流
Swift 语言支持C语言全部的控制语句.包含for 和while循环语句,if和switch条件语句,以及break和continue控制语句等. Swift 语言除了支持以上语句,还添加了一个f ...
- 苹果新的编程语言 Swift 语言进阶(十六)--泛型
泛型允许你定义一个宽松.可重用的函数或者类型,使用泛型能够避免代码的重复,也能以更清楚和抽象的方式来表达程序的意图. 泛型是Swift语言提供的强大功能之一,Swift提供的许多标准库都使用了泛型来创 ...
- 苹果新的编程语言 Swift 语言进阶(十一)--实例的初始化与类的析构
一 .实例的初始化 实例的初始化是准备一个类.结构或枚举的实例以便使用的过程.初始化包括设置一个实例的每一个存储属性为一个初始值,以及执行任何其它新的实例能够使用之前需要的设置或初始 ...
随机推荐
- CCSpriteBatchNode中存放元素的一点理解
该对象只能包含基于CCSprite的对象,并且该要求适用于一切子孙对象.即加入CCSpriteBatchNode的任何对象都必须是CCSprite或其子类. 比如CCSpriteBatchNode包含 ...
- tomcat自动运行磁盘任意位置上的项目、使用Maven对tomcat进行自动部署
对于非Maven的web项目,有时候我们想不时常通过打war包.拷贝war包.启动tomcat来运行项目.这时候我们可以通过以下方式来进行配置: 1.1:创建web工程.工程结构如下: 1.2. ...
- Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629449 前言:上篇文中分析 ...
- springmvc文件上传和拦截器
文件上传 用到这两个包 配置视图解析器:springmvc配置文件配置 <!-- id必须要是"multipartResolver" --> <bean id=& ...
- 插件占坑,四大组件动态注册前奏(三) 系统BroadCast的注册发送流程
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52204143 前言:为什么要了解系统Activity,Service,BroadCas ...
- Cocos2D游戏项目CCTableView在Xcode7.2下的无法滚动问题
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 一个RPG游戏转换到Xcode7.2下发现一个问题,原来可以上 ...
- J2EE进阶(十)SSH框架整合常见问题汇总(一)
SSH框架整合常见问题汇总(一) 前言 以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决. HTTP Status 404 - No result defined for actio ...
- UNIX网络编程——shutdown 与 close 函数 的区别
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...
- Unity 简易的UI背景昼夜轮替效果
在UI背景上实现一个简易的有光影照射的昼夜轮替效果,往往比一个死板的UI背景看起来更加形象生动,比较传统的方式是多图轮流替换的序列帧动画,不过要达到整个UI背景大图的所有地方都产生光影效果,那么务必每 ...
- IOC 控制反转(Inversion of Control,英文缩写为IoC)
在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 在这样的齿轮组中,因为是协同工作,如果有一个齿轮出了问题,就可能会影响到整个齿 ...