Swift以其新面目闪亮登场,北京iOS培训,蓝鸥3G学院和您一起解析苹果新语言:
Swift是一门集C语言、Objective-C语言优势于一身的全新编程语言,是由苹果开发的专门针对iOS以及OSX平台的程序设计语言,并且完全兼容C语言。Swift采用更安全的编程模式,并且添加了一些流行的特性,这让编程变得更加简单,更加灵活,更有乐趣。Swift以其全新的面貌展示给众人,借助于成熟的、非常受欢迎的Cocoa以及CocoaTouch框架为重新定义软件开发方式创造了有利条件。
Swift已经酝酿多年,苹果通过改进现有的编译器、调试器、以及基础框架为Swift建立了坚实的基矗我们通过自动引用计数技术(ARC)进一步简化了内存管理的方式。建立在Foundation框架以及Cocoa框架等坚实的基础上的框架,Swift已经具备现代化和标准化的特征。Objective-C已经演化到支持块语句(block)、集合字面量、模块以及通过使用框架来与现代化语言技术实现无缝对接。感谢这些基础工作,我们现在可以正式介绍苹果未来软件开发的全新语言-Swift。
Swift对于使用Objective-C作为开发语言的开发人员来说可谓似曾相识,十分亲切。因为它采用Objective-C见名知意的参数命名规则以及强大的Objective-C动态对象模型。它可以与现有的Cocoa框架无缝对接,并且可以与Objective-C实现代码混编。建立在这些共同点上,Swift还引入了许多新特性、代码混编并且是完全面向对象的语言。
Swift对于开发者来说是友好的。它是第一款像脚本语言一样灵活、有趣的企业级系统编程语言。它支持playgrounds模式,一个无需通过编译和运行程序就能允许开发者一边写Swift代码一边立即查看代码的执行结果的创造性尝试。
Swift结合了现代开发语言的各种优势,这源自于苹果的优良的开发文化。其编译器为性能而生,而其语言为开发而生,缺一不可。这一切使得Swift成为开发者乃至苹果最有价值的投资。
编写iOS和OSX应用,Swift是一个非常棒的方式,未来会持续引入新特性和新功能。对于Swift,我们拥有雄心壮志,真是迫不及待的想要看到您如何用它来创造奇迹。
Swift概览
依照传统,第一次使用新的语言做开发,应当在屏幕上打印出来“Hello,world”。用Swift,只需要简单的写下如下语句:
println("Hello,world")
如果你已经写过C语言或者Objective-C代码,Swift这种语法规则你一定会觉得很面熟,并且这已经是一个完整的程序了。你无需引入单独的类库来完成输入/输入或者字符串操作功能。代码书写在一个程序的全局入口,所以你不再需要main函数。最最重要的是你也不必在每行语句结束时写上恼人的分号。
本章节将提供足够的信息帮助你如何使用Swift语言完成多种不同的编程工作。还不理解?不必担心,概览中提到的知识点将在本书随后的内容中会详细讲解。
注:
为了得到更好的体验,请在XCode中创建playground项目,Playgrounds可以编写Swift代码,同时立即查看代码的执行结果
简单值
使用let关键字声明常量,使用var关键字声明变量。虽然编译时不必知道常量的值,但是至少得为声明的常量赋值一次。这意味着声明一个常量,可以多次使用该常量对应的值。
varmyVariable=42
myVariable=50
letmyConstant=42
常量或者变量应当与你所赋的值类型相同。通常,不用书写确切的类型。只需要为一个常量或者变量赋值,让编译器去推断它们的类型吧。在上述的例子中,编译器会推断出myVariable变量是一个整型integer因为其初值就是整型的。
如果初值没有足够的信息用于推断其类型(或者根本没有初值)可以通过在常量或者变量名后添加冒号和类型名来指定其类型。
letimplicitInteger=70
letimplicitDouble=70.0
letexplicitDouble:Double=70
实验:
声明一个常量赋初值为4,并且指明其类型为Float型
在Swift中不能隐式转换一个值的类型,如果需要将某个值转换成不同类型,需要创建代转类型的实例。
letlabel="Thewidthis"
letwidth=94
letwidthLabel=label+String(width)
实验:
尝试移除最后一行字符串转换函数,看到了什么错误?
其实有更简单的方式将一些基本数据包含到字符串中,那就是将数据写在小括号中,然后在小括号前加一个反斜杠就可以了。例如:
letapples=3
letoranges=5
letappleSummary="Ihave\(apples)apples."
letfruitSummary="Ihave\(apples+oranges)piecesoffruit."
实验:
使用\()将一个浮点型数值加入到一个包含某人姓名的字符串中
用中括号([])来声明数组和字典,然后通过在[]中写上数组的下标或者字典中的键来访问数据元素。
varshoppingList=["catfish","water","tulips","bluepaint"]
shoppingList[1]="bottleofwater"
varoccupations=[
"Malcolm":"Captain",
"Kaylee":"Mechanic",
]
occupations["Jayne"]="PublicRelations"
如果要创建空的数组或者字典,可以使用初始化语法。
letemptyArray=String[]()
letemptyDictionary=Dictionary
如果类型可以被编译器推断出来,那么你可以直接用[]创建空数组,[:]来创建字典—例如,当你为一个变量赋一个新值,或者为一个函数传参数是,你可以这样做:
shoppingList=[]//Wentshoppingandboughteverything.
控制流程
使用if和switch做条件判断,使用for-in,for,while和do-while来执行循环。值得注意的是,判断条件或者循环变量旁的小括号不是必写的。但是大括号依然要写。
letindividualScores=[75,43,103,87,12]
varteamScore=0
forscoreinindividualScores{
ifscore>50{
teamScore+=3
}else{
teamScore+=1
}
}
teamScore
在if语句中,判断条件必须是布尔表达式(Boolean)—这样的话,ifscore{…}这句就是有错误的,因为score并不是隐式的跟0做比较。
在当某些值可能为空的时候,你可以同时使用if和let,这样这些值就表示为可选的。一个可选的值既可以包含某个确定的值也可以为nil,nil表示一个空值。当然在类型后加一个问号(?)就可以将该值标记为可选的。
varoptionalString:String?="Hello"
optionalString==nil
varoptionalName:String?="JohnAppleseed"
vargreeting="Hello!"
ifletname=optionalName{
greeting="Hello,\(name)"
}
实验:
将optionalName赋值为nil,greeting的结果会是什么呢?当optionalName为nil是添加一个else语句来设置一个不同的greeting
如果可选值为nil,那么if语句的判断条件就是false,大括号中的代码也会被跳过。否则,可选值就会执行相关的代码块并把结果赋值给let后面对应的常量,这样大括号所表示的代码块的值就会可用。
不同于C语言或者Objective-C,switch语句在Swift语言中支持任意数据类型和各种各样的比较操作—并局限于整型和等式比较。
letvegetable="redpepper"
switchvegetable{
case"celery":
letvegetableComment="Addsomeraisinsandmakeantsonalog."
case"cucumber","watercress":
letvegetableComment="Thatwouldmakeagoodteasandwich."
caseletxwherex.hasSuffix("pepper"):
letvegetableComment="Isitaspicy\(x)?"
default:
letvegetableComment="Everythingtastesgoodinsoup."
}
实验:
尝试移除defaultcase,你看到了什么错误?
当符合条件的case被执行后,程序将会跳出switch语句。程序并不会顺序执行接下来的case,所以在switch语句中就没有必要显式的通过在每个case对应的代码片段结尾使用关键字break来跳出该语句。
同时,你可以通过两个变量来表示字典的每一个键值对再配合使用for-in来快速遍历字典。
letinterestingNumbers=[
"Prime":[2,3,5,7,11,13],
"Fibonacci":[1,1,2,3,5,8],
"Square":[1,4,9,16,25],
]
varlargest=0
for(kind,numbers)ininterestingNumbers{
fornumberinnumbers{
ifnumber>largest{
largest=number
}
largest
实验:
通过添加一个新的变量来记录遍历得到的数中的最大数
while语句依然继承自C语言,除非条件发生改变,否则会循环执行某段代码。同时循环的条件也可以写在最后面,这样可以确保循环至少会被执行一次—do-while。
varn=2
whilen<100{
n=n*2
}
n
varm=2
do{
m=m*2
whilem<100
m
在for循环中,你可以使用..来描述循环变量的取值范围,或者依然使用C语言中声明变量,条件和自增运算的方式,这两者是等价的。
varfirstForLoop=0
foriin0..3{
firstForLoop+=i
}
firstForLoop
varsecondForLoop=0
forvari=0;i<3;++i{
secondForLoop+=1
}
secondForLoop
如果是使用..的话,取值范围不包括上限(类似于i<5),若要包括则需要使用…(i<=5).
全部内容请关注蓝鸥iOS培训:lanou3g/lo_news/