苹果公司推出的新编程语言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")