您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > Swift 基础入门
目录1欢迎使用Swift1.1关于Swift1.2Swift初见2Swift教程2.1基础部分2.2基本运算符2.3字符串和字符2.4集合类型2.5控制流2.6函数2.7闭包2.8枚举2.9类和结构体2.10属性2.11方法2.12附属脚本2.13继承2.14构造过程2.15析构过程2.16自动引用计数2.17可选链2.18类型检查2.19类型嵌套2.20扩展2.21协议2.22泛型2.23高级操作符3语言参考3.1关于语言参考3.2词法结构3.3类型3.4表达式3.5语句3.6声明3.7特性3.8模式3.9泛型参数3.10语法总结1.1关于SwiftSwift是一种新的编程语言,用于编写iOS和OSX应用。Swift结合了C和Objective-C的优点并且不受C兼容性的限制。Swift采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift是基于成熟而且倍受喜爱的Cocoa和CocoaTouch框架,他的降临将重新定义软件开发。Swift的开发从很久之前就开始了。为了给Swift打好基础,苹果公司改进了编译器,调试器和框架结构。我们使用自动引用计数(AutomaticReferenceCounting,ARC)来简化内存管理。我们在Foundation和Cocoa的基础上构建框架栈并将其标准化。Objective-C本身支持块、集合语法和模块,所以框架可以轻松支持现代编程语言技术。正是得益于这些基础工作,我们现在才能发布这样一个用于未来苹果软件开发的新语言。Objective-C开发者对Swift并不会感到陌生。它采用了Objective-C的命名参数以及动态对象模型,可以无缝对接到现有的Cocoa框架,并且可以兼容Objective-C代码。在此基础之上,Swift还有许多新特性并且支持过程式编程和面向对象编程。Swift对于初学者来说也很友好。它是第一个既满足工业标准又像脚本语言一样充满表现力和趣味的编程语言。它支持代码预览,这个革命性的特性可以允许程序员在不编译和运行应用程序的前提下运行Swift代码并实时查看结果。Swift将现代编程语言的精华和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发进行了优化,两者互不干扰,鱼与熊掌兼得。Swift既可以用于开发“hello,world”这样的小程序,也可以用于开发一套完整的操作系统。所有的这些特性让Swift对于开发者和苹果来说都是一项值得的投资。用Swift编写iOS和OSX应用将是一场美妙的体验,Swift之后也会不断开发新特性和兼容性。我们对Swift充满信心,你还在等什么!1.2Swift初见通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello,world”。在Swift中,可以用一行代码实现:println(Hello,world)如果你写过C或者Objective-C代码,那你应该很熟悉这种形式——在Swift中,这行代码就是一个完整的程序。你不需要为了输入输出或者字符串处理导入一个单独的库。全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main函数。你同样不需要在每个语句结尾写上分号。这个教程会通过一系列编程例子来让你对Swift有初步了解,如果你有什么不理解的地方也不用担心——任何本章介绍的内容都会在后面的章节中详细讲解。注意:为了获得最好的体验,在Xcode当中使用代码预览功能。代码预览功能可以让你编辑代码并实时看到运行结果。简单值使用let来声明常量,使用var来声明变量。一个常量的值在编译时并不需要获取,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需要使用很多次。varmyVariable=42myVariable=50letmyConstant=42常量或者变量的类型必须和你赋给它们的值一样。然而,声明时类型是可选的,声明的同时赋值的话,编译器会自动推断类型。在上面的例子中,编译器推断出myVariable是一个整数(integer)因为它的初始值是整数。如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。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.练习:使用\()来把一个浮点计算转换成字符串,并加上某人的名字,和他打个招呼。使用方括号[]来创建数组和字典,并使用下标或者键(key)来访问元素。varshoppingList=[catfish,water,tulips,bluepaint]shoppingList[1]=bottleofwatervaroccupations=[Malcolm:Captain,Kaylee:Mechanic,]occupations[Jayne]=PublicRelations要创建一个空数组或者字典,使用初始化语法。letemptyArray=String[]()letemptyDictionary=Dictionary()如果类型信息可以被推断出来,你可以用[]和[:]来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。shoppingList=[]//去逛街并买点东西控制流使用if和switch来进行条件操作,使用for-in、for、while和do-while来进行循环。包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。letindividualScores=[75,43,103,87,12]varteamScore=0forscoreinindividualScores{ifscore50{teamScore+=3}else{teamScore+=1}}teamScore在if语句中,条件必须是一个布尔表达式——这意味着像ifscore{...}这样的代码将报错,而不会隐形地与0做对比。你可以一起使用if和let来处理值缺失的情况。有些变量的值是可选的。一个可选的值可能是一个具体的值或者是nil,表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。varoptionalString:String?=HellooptionalString==nilvaroptionalName:String?=JohnAppleseedvargreeting=Hello!ifletname=optionalName{greeting=Hello,\(name)}练习:把optionalName改成nil,greeting会是什么?添加一个else语句,当optionalName是nil时给greeting赋一个不同的值。如果变量的可选值是nil,条件会判断为false,大括号中的代码会被跳过。如果不是nil,会将值赋给let后面的常量,这样代码块中就可以使用这个值了。switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。letvegetable=redpepperswitchvegetable{casecelery:letvegetableComment=Addsomeraisinsandmakeantsonalog.casecucumber,watercress:letvegetableComment=Thatwouldmakeagoodteasandwich.caseletxwherex.hasSuffix(pepper):letvegetableComment=Isitaspicy\(x)?default:letvegetableComment=Everythingtastesgoodinsoup.}练习:删除default语句,看看会有什么错误?运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写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=0for(kind,numbers)ininterestingNumbers{fornumberinnumbers{ifnumberlargest{largest=number}}}largest练习:添加另一个变量来记录哪种类型的数字是最大的。使用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参数,添加一个参数来表示今天吃了什么午饭。使用一个元组来返回多个值。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:
本文标题:Swift 基础入门
链接地址:https://www.777doc.com/doc-6460355 .html