Swift
是一门汲取了C
与Objective-C
的精华,用来开发iOS
和OS X
应用的新的编程语言(由苹果公司于2014年6月7日发布)。Swift摆脱了C语言兼容性的约束,采用安全的编程模式并且添加了现代化的特性,让编程更加容易,灵活和有趣。Swift
诞生伊始,在成熟而又深受欢迎的Cocoa
、Cocoa Touch
框架的支持下,可以重新定位软件开发工作。
Swift
是花费了多年打造的编程语言。苹果公司通过改进我们现行的编译器,调试器以及框架底层结构为Swift奠定了基础。我们用ARC(Automatic Reference Counting - 自动引用计数)
简化了内存管理。我们的框架栈,是建立在Foundation
和Cocoa
这两个框架的坚实基础之上的,并且已经全部使之现代化,标准化。Objective-C
它自己已经渐渐完善,支持了blocks
,collection literals
,以及 modules
, 使得框架在无破坏的情况下采用现代语言技术。基于这个基础,我们现在能够介绍一门将来用于苹果开发的新的编程语言。
Swift
会让Objective-C
的开发者感觉很熟悉。它采用了Objective-C
参数命名方式的可读性以及动态对象模型。它可以无缝访问现有的Cocoa
框架以及与Objective-C
混合编程。Swift
还介绍了许多新的特性以及结合了语言中面向过程和面向对象的部分
Swift
对新的程序员很友好。它兼具编译语言的高性能(Performance)和脚本语言的交互性(Interactive)。它支持的playgrounds
, 是一个创新的特性,能够让程序员利用Swift
代码在不需要编译和运行app的情况下,马上看到代码所对应的结果。
Swift
将现代语言和苹果的工程文化智慧很好的结合起来。编译器在性能方面充分发挥出来,而语言在开发领域充分得到展现,它们之间无须任何妥协。它的设计从"hello world"
工程的规模到一个完整的操作系统都得到完整的考虑。所有的一切,让Swift
成为所有开发者以及苹果公司未来的福音。
Swift
是一种非常优秀的方式去开发iOS
以及OS X
应用程序,而且在将来继续在新特性和新功能上会更加完善。我们对的Swift
未来是十分有信心的,我们已经迫不及待地想看到你用它来开发的产品了。
Swift
和C
语言类似采用一条打印语句来输出“hello world”
println("hello world")
此时此刻,你会想很多问题,main
函数在哪?怎么println("hello world")
语句后面没有分号?怎么没有程序的返回值?这又是Swift
语言的一大特性,程序不需要写任何main
函数,执行顺序默认从上到下。每条语句后面也不需要加分号“;”。
在C
语言中定义常量应该是以const
为关键字来定义,而在Swift
中我们用的是let
关键字。
let myConstant = 10
myConstant
这个值为10的常量在C
语言中定义变量我们没有任何关键字,而Swift
中我们采用关键字var
来定义
var myVariable = 42
myVariable
这个值为42的变量这个时候机智如我的你又有疑问了,常量变量的数据去哪了?这又是Swift
语言的特性。Swift
根据变量(这里所说的变量包括了常量和变量以下如果不作区分都是这个意思)声明时所赋的初始值,自动捕获数据类型(“什么?!自动捕获数据类型,这也太吊炸天了吧!!”)。没错Swift
,就是具有这样的功能。随之而来的疑问又是,如果我想只声明变量,不想给它赋值,那它捕捉个鬼啊。的确,如果你在声明变量的时候,如果像这样写let noInitialValue
或者var noInitialValue
编译器是会报错的。这个时候你要指定它的数据类型了,声明方式如下。
var noInitialValue: Int
noInitailValue = 10
let
关键字定义的变量声明的时候绝对不能没有初始值,因为常量在声明之后是不能改变的String
)插值变量的数据类型是不能隐式转换的。什么意思呢?在C
语言中,浮点型变量是可以直接赋值给整型变量的,只不过会造成精度丢失罢了,并不会报语法错误。而Swift
中这样是不允许的,它必须显式的转换。
//隐式转换方式,这样是错误的
var floatValue = 12.5
var intValue: Int
intValue = floatValue
//显式转换方式,这样是正确的
var floatValue = 12.5
var intValue: Int
intValue = Int(floatValue)
同样Int型也可以转换成String
类型的
//10Apple
let numberOfApples = 10
let fruite = "Apple"
let numberOfFruite = String(numberOfApples) + fruite
numberOfFruite
的值为“10Apple”可以转换成字符串类型的数据还有更加快捷的转换方式就是字符串插值
在字符串内用一个“\()”的形式,在括号里面加入可以转换成字符串的变量
//10Apple
let numberOfApples = 10
let numberOfOranges = 5
let numberOfFruite = "\(numberOfApples + numberOfOranges)Fruite"
numberOfFruite
的值为“15Fruite”Array
)和字典(Dictionary
)数字和字典都是用一个方括号的形式定义的“[ ]”。
//数组的定义方式
var? ?shoppingList? = [?"catfish"?, ?"water"?, ?"tulips"?, ?"blue paint"?]
?shoppingList?[?1?] = ?"bottle of water"
shoppingList
的值变为?”catfish”?, ?”bottle of water”?, ?”tulips”?, ?”blue paint”初始化空数组(有内存地址,但是数组元素为0个)
//指定数据类型的空数组的定义方式
?let? ?emptyArray? = [?String?]()
emptyArray
的元素个数为0,但是已经确定了数组内的元素必须为String
类型”任意类型的空数组定义方式
//任意数据类型的空数组的定义方式
?var? anyType?EmptyArray? = [?]
anyType?EmptyArray
的元素个数为0, 但是不能用anyType?EmptyArray[0] = 1
这种方式赋值,只能将已知的数组赋值给这个数组//字典的定义方式
?var? ?occupations? = [
? ?"Malcolm"?: ?"Captain"?,
? ?"Kaylee"?: ?"Mechanic"?,
?]
?occupations?[?"Jayne"?] = ?"Public Relations"
occupations
的值变为?[“Malcolm”: “Captain” ?, ?”Kaylee”? : “Mechanic”, ? “Jayne” : “Public Relations”?]key-value
键值对的形式存储的,它的索引方式是通过key
来找到对应的value
,这里”Malcolm”是key
, 这个key
所对应的value
为”Captain”初始化空字典(有内存地址,但是字典元素为0个)
//字典的定义方式
?let? ?emptyDictionary? = [String: Float?]()
emptyDictionary
为空字典,里面没有元素,它的key
为String
类型,对应的value
为Float
类型任意key
类型,value
类型的空字典定义方式
//任意key类型,value类型的空字典定义方式
?var? anyType?EmptyDictionary = [:?]
anyType?EmptyDictionary
为空字典,里面没有元素,它的key
为任意类型,对应的value
为任意类型,同样也不能通过anyType?EmptyDictionary["myKey"] = "myValue"
的形式赋值,只能讲已知字典变量赋值给它原文地址:http://blog.csdn.net/qq_19762007/article/details/44155419