您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Swift编程语言中文教程
关于SwiftSwift是一门用于开发iOS和OSX应用程序的新语言,基于C和Object-C,但是没有C兼容性的限制。Swift采用安全的编程模式,并增加了许多新的现代模式,让编程更加的容易、灵活,让编程更加有乐趣。Swift被目前成熟并很受欢迎的Cocoa和CocoaTouch支持,是重新思考如何做软件开发的时候了。 Swift已经经过多年的酝酿。苹果公司通过改进现有的编译器,调试器和基本框架奠定了Swift的基础。我们通过自动引用计数(ARC)简化了存储管理。我们的框架协议栈,建立在坚实的基础框架和Cocoa之上,并且更加新潮和标准化。Objective-C本生已经实现模块化,允许框架使用新的编程语言。由于这个基础,我们现在可以引入新的语言开发未来的苹果软件。 Objective-C的程序员对Swift会很容易上手,因为它采用Objective-C相同的命名规则以及Objective-C的动态对象模型。Swift可以无缝的调用Cocoa框架,并且可以和Objective-C混编。Swift引入了许多新的特性,统一了编程语言程序和面向对象部分。 Swift对于新接触的程序员也相当友好。它是第一个工业品质系统的编程语言,Swift编写的程序可以及时看到效果,并且是一门很有趣的脚本语言。Swift无需写完代码后再编译运行。 Swift结合了现代编程语言的思维,广泛的结合苹果工程师的智慧。Swift的编译器正对性能进行了优化,扩展等无需其它的开销。它的设计从“hello,word”扩展到整个操作系统。所有的一切值得开发者和苹果公司对Swift的投资。 Swift是一种优雅的方式来编写iOS和OSX应用程序,会持续加入新的功能和特性。我们对Swift充满信心。我们迫不及待的想看到您用Swift编写的有趣App。开始Swift之旅依据传统,一门新语言的第一个程序是在屏幕上打印出“HelloWorld”。用Swift可以在一行代码中实现:println(Hello,world);如果你曾经写过C或则Objective-C,这行Swift语法你看起来或许非常熟悉,这行代码已经是一个完整的程序。你不需要导入一个单独的库来处理类似输入/输出、字符串处理问题。全局范围内写的代码被作为整个程序的入口,因此你不需要一个main函数。同样不需要在语句结尾写分号(;)。本节文章展示Swift如何完成各种编程任务,给你足够的信息来学习Swift。如果在学习本节时候你有不明白的地方不用担心,整个教程的其余部分会有一个详细的说明。注意:为获得最佳体验,请下载并在Xcode中打开源码。可以编辑的代码,并立即看到结果。目录隐藏1简单的赋值2流程控制2.1if2.2switch2.3for-in2.4while3函数与闭包4类和对象5枚举与结构6接口和扩展7泛型简单的赋值使用let来定义常量,var定义变量。常量的值无需在编译时指定,但是至少要赋值一次。这意味着你可以使用常量来命名一个值,你发现只需一次定义,多个地方使用。varmyVariable=42myVariable=50letmyConstant=42一个常量或变量必须与赋值时拥有相同的类型。因此你不用严格定义类型。提供一个值就可以创建常量或变量,并让编译器推断其类型。在上面例子中,编译其会推断myVariable是一个整数类型,因为其初始化值就是个整数。如果初始化值没有提供足够的信息(或没有初始化值),可以在变量名后写类型,以冒号分隔。letimplicitInteger=70letimplicitDouble=70.0letexplicitDouble:Double=70练习:创建一个常量,类型为Float,值为4值永远不会隐式转换为另一种类型。如果你需要把一个值转换到不同类型,需要明确的构造一个所需类型的实例。letlabel=Thewidthisletwidth=94letwidthLabel=label+String(width)练习:尝试删除最后一行的String转换,你会得到什么错误?还有更简单的方法实现在字符串中包含值:以小括号来写值,并用反斜线(\)放在小括号之前。例如:letapples=3letoranges=5letappleSummary=Ihave\(apples)apples.letfruitSummary=Ihave\(apples+oranges)piecesoffruit.练习:字符串中使用\()来包含一个浮点数,并包含某人的名字创建一个数组和字典使用方括号[],访问其元素则是通过方括号中的索引或键。varshoppingList=[catfish,water,tulips,bluepaint]shoppingList[1]=bottleofwatervaroccupations=[Malcolm:Captain,Kaylee:Mechanic,]occupations[Jayne]=PublicRelations要创建一个空的数组或字典,使用初始化语法:letemptyArray=String[]()letemptyDictionary=DictionaryString,Float()如果类型信息无法推断,你可以写空的数组[]和空的字典[:],例如你设置一个知道变量并传入参数到函数:shoppingList=[]//Wentshoppingandboughteverything流程控制使用if和switch作为条件控制。使用for-in、for、while、do-while作为循环。小括号不是必须的,但主体的大括号是必需的。letindividualScores=[75,43,103,87,12]varteamScore=0forscoreinindividualScores{ifscore50{teamScore+=3}else{teamScore+=1}}teamScoreif在if语句中,条件必须是布尔表达式,这意味着ifscore{...}是错误的,不能隐含的与0比较。你可以一起使用if和let来防止值的丢失。这些值是可选的。可选值可以包含一个值或包含一个nil来指定值还不存在。写一个问号?在类型后表示值是可选的。varoptionalString:String?=HellooptionalString==nilvaroptionalName:String?=JohnAppleseedvargreeting=Hello!ifletname=optionalName{greeting=Hello,\(name)}练习:改变optionalName为nil会发生什么?添加一个else子句,如果optionalName为nil时设置一个不同的值如果可选值为nil,条件判断为false,大括号中的代码会被跳过。否则可选值未赋值,并赋值给了一个常量,这样为赋值变量会到代码块中执行。switchswitch支持多种数据以及多种比较,不限制必须是整数letvegetable=redpepperswitchvegetable{casecelery:letvegetableComment=Addsomeraisinsandmakeantsonalog.casecucumber,watercress:letvegetableComment=Thatwouldmakeagoodteasandwich.caseletxwherex.hasSuffix(pepper):letvegetableComment=Isitaspicy\(x)?default:letvegetableComment=Everythingtastesgoodinsoup.}练习:尝试去掉default,看看得到什么错误在执行匹配的情况后,程序会从switch跳出,而不是继续执行下一个情况。所以不再需要break跳出switch。for-in可使用for-in来迭代字典中的每个元素,提供一对名字来使用每个键值对。letinterestingNumbers=[Prime:[2,3,5,7,11,13],Fibonacci:[1,1,2,3,5,8],Square:[1,4,9,16,25],]varlargest=0for(kind,numbers)ininterestingNumbers{fornumberinnumbers{ifnumberlargest{largest=number}}}largest练习:添加另一个变量来跟踪哪个种类中的数字最大,也就是最大的数字所在的while使用while来重复执行代码块直到条件改变。循环的条件可以放在末尾来确保循环至少执行一次。varn=2whilen100{n=n*2}nvarm=2do{m=m*2}whilem100m你可以在循环中保持一个索引,通过..来表示索引范围或明确声明一个初始值、条件、增量。这两个循环做相同的事情:varfirstForLoop=0foriin0..3{firstForLoop+=i}firstForLoopvarsecondForLoop=0forvari=0;i3;++i{secondForLoop+=1}secondForLoop使用..构造范围忽略最高值,而用...构造的范围则包含两个值。函数与闭包使用func声明一个函数。调用函数使用他的名字加上小括号中的参数列表。使用-分隔参数的名字和返回值类型。funcgreet(name:String,day:String)-String{returnHello\(name),todayis\(day).}greet(Bob,Tuesday)练习:去掉day参数,添加一个参数包含今天的午餐选择使用元组(tuple)来返回多个值。funcgetGasPrices()-(Double,Double,Double){return(3.59,3.69,3.79)}getGasPrices()函数可以接受可变参数个数,集合到一个数组中。funcsumOf(numbers:Int...)-Int{varsum=0fornumberinnumbers{sum+=number}returnsum}sumOf()sumOf(42,597,12)练习:编写一个函数计算其参数的平均值函数可以嵌套。内嵌函数可以访问其定义所在函数的变量。你可以使用内嵌函数来组织代码,避免函数过长和过于复杂。funcreturnFifteen()-Int{vary=10funcadd(){y+=5}add()returny}returnFifteen()函数是第一类型的。这意味着函数可以返回另一个函数funcmakeIncrementer()-(Int-Int){funcaddOne(number:Int)-Int{return1+number}returnaddOne}varincrement=makeIncrementer()increment(7)一个函数可以接受其他函数作为参数funchasAnyMatches(list:Int[],condition:Int-Bool)-Bool{foriteminlist{ifcondition(item){returntrue}}returnfalse}funclessThanTen(number:Int)-Bool{returnnumber10}varnumbers=[20,19,7,12]hasAnyMatches(numbers,lessThanTen)函数实际是闭包的特殊情况。你可以写一个闭包而无需名字,只需要放在大括号中即可。使用in把参数、返回值和函数体分开。numbers.map({(number:Int)-Intinletresult=3*numberreturnresult})练习:重写这个闭包,所有奇数返回0。写闭包时有多种选项。当一个闭包的类型是已知时,例如代表回调,你可以忽略其参数和返回值,或两
本文标题:Swift编程语言中文教程
链接地址:https://www.777doc.com/doc-5238131 .html