苹果公司推出的新编程语言Swift简介和入门教程
一、Swift是什么?
Swift是苹果于WWDC2014发布的编程语言,这里引用TheSwiftProgrammingLanguage的原话:
SwiftisanewprogramminglanguageforiOSandOSXappsthatbuildsonthebestofCandObjective-C,withouttheconstraintsofCcompatibility. Swiftadoptssafeprogrammingpatternsandaddsmodernfeaturestomakeprogrammingeasier,moreflexibleandmorefun. Swift'scleanslate,backedbythematureandmuch-lovedCocoaandCocoaTouchframeworks,isanopportunitytoimaginehowsoftwaredevelopmentworks. Swiftisthefirstindustrial-qualitysystemsprogramminglanguagethatisasexpressiveandenjoyableasascriptinglanguage.
简单的说:
Swift用来写iOS和OSX程序。(估计也不会支持其它屌丝系统)
Swift吸取了C和Objective-C的优点,且更加强大易用。
Swift可以使用现有的Cocoa和CocoaTouch框架。
Swift兼具编译语言的高性能(Performance)和脚本语言的交互性(Interactive)。
二、Swift语言概览
1.基本概念
注:这一节的代码源自TheSwiftProgrammingLanguage中的ASwiftTour。
1.1.Hello,world
类似于脚本语言,下面的代码即是一个完整的Swift程序。
println("Hello,world")
1.2.变量与常量
Swift使用var声明变量,let声明常量。
armyVariable=42 myVariable=50 letmyConstant=42
1.3.类型推导
Swift支持类型推导(TypeInference),所以上面的代码不需指定类型,如果需要指定类型:
letexplicitDouble:Double=70
Swift不支持隐式类型转换(Implicitlycasting),所以下面的代码需要显式类型转换(Explicitlycasting):
letlabel="Thewidthis" letwidth=94 letwidth=label+String(width)
1.4.字符串格式化
Swift使用(item)的形式进行字符串格式化:
letapples=3 letoranges=5 letappleSummary="Ihave(apples)apples." letappleSummary="Ihave(apples+oranges)piecesoffruit."
1.5.数组和字典
Swift使用[]操作符声明数组(array)和字典(dictionary):
varshoppingList=["catfish","water","tulips","bluepaint"] shoppingList[1]="bottleofwater" varoccupations=[ "Malcolm":"Captain", "Kaylee":"Mechanic", ] occupations["Jayne"]="PublicRelations"
一般使用初始化器(initializer)语法创建空数组和空字典:
letemptyArray=String[]() letemptyDictionary=Dictionary<String,Float>()
如果类型信息已知,则可以使用[]声明空数组,使用[:]声明空字典。
2.控制流
2.1概览
Swift的条件语句包含if和switch,循环语句包含for-in、for、while和do-while,循环/判断条件不需要括号,但循环/判断体(body)必需括号:
letindividualScores=[75,43,103,87,12]
varteamScore=0
forscoreinindividualScores{
ifscore>50{
teamScore+=3
}else{
teamScore+=1
}
}
2.2可空类型
结合if和let,可以方便的处理可空变量(nullablevariable)。对于空值,需要在类型声明后添加?显式标明该类型可空。
varoptionalString:String?="Hello"
optionalString==nil
varoptionalName:String?="JohnAppleseed"
vargretting="Hello!"
ifletname=optionalName{
gretting="Hello,(name)"
}
2.3灵活的switch
Swift中的switch支持各种各样的比较操作:
letvegetable="redpepper"
switchvegetable{
case"celery":
letvegetableComment="Addsomeraisinsandmakeantsonalog."
case"cucumber","watercress":
letvegetableComment="Thatwouldmakeagoodteasandwich."
caseletxwherex.hasSuffix("pepper"):
letvegetableComment="Isitaspicy(x)?"
default:
letvegetableComment="Everythingtastesgoodinsoup."
}
2.4其它循环
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循环和do-while循环:
varn=2
whilen<100{
n=n*2
}
varm=2
do{
m=m*2
}whilem<100
m
Swift支持传统的for循环,此外也可以通过结合..(生成一个区间)和for-in实现同样的逻辑。
varfirstForLoop=0
foriin0..3{
firstForLoop+=i
}
firstForLoop
varsecondForLoop=0
forvari=0;i<3;++i{
secondForLoop+=1
}
secondForLoop
注意:Swift除了..还有…:..生成前闭后开的区间,而…生成前闭后闭的区间。
3.函数和闭包
3.1函数
Swift使用func关键字声明函数:
funcgreet(name:String,day:String)->String{
return"Hello(name),todayis(day)."
} greet("Bob","Tuesday")