Swift的基本语法_第1页
Swift的基本语法_第2页
Swift的基本语法_第3页
Swift的基本语法_第4页
Swift的基本语法_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Swift的基本语法1 .基本语法1.1 变量和常量:1.1.1 定义let定义常量,一旦赋值不允许再修改.Var定义变量,赋值之后仍然可以修改.1.1.2 自动推导:swift能够根据右边的代码,推导出变量的类型通常在开发的时候不需要指定变量类型如果需要指定变量类型,可以在变量名后使用:,然后跟上变量的类型1.1.3 没有隐式转换swift对数据类型要求严格任何时候,都不允许做隐式转换1.1.4 let和var的选择应该尽量先选择常量,只有在必须修改时,才修改为var在xcode7.0中,如果没有修改变量,xcode会提示修改为let1.2 Optional可选项1.2.1Optional是

2、Swift的一大特色,也是Swift初学者最容易困惑的问题定义变量时,如果指定是可选的,表示该变量可以有一个指定类型的值,也可以是nil定义变量时,在类型后面添加一个?,表示该变量是可选的变量可选项的默认值是nil常量可选项没有默认值,主要用于在构造函数中给常量设置初始数值如果Optional值是nil,不允许参与计算,只有解包(unwrap)后才能参与计算,在变量后添加一个!,可以强行解包1.2.2 常见错误unexpectedlyfoundnilwhileunwrappinganOptionalvalue1.2.3 ?德算符?运算符可以用于判断变量/常量的数值是否是nil,如果是则使用后面

3、的值替代在使用Swift开发时,?能够简化代码的编写1.3 控制流1.3.1 ifSwift中没有C语言中的非零即真概念在逻辑判断时必须显示地指明具体的判断条件true/false,if语句条件的()可以省略,但是不能省略1.3.2 三目运算Swift中的三目运算保持了和OC一致的风格1.3.3 可选项判断由于可选项的内容可能为nil,而一旦为nil则不允许参与计算因此在实际开发中,经常需要判断可选项的内容是否为nil单个可选项判断用if条件判断小结:iflet不能与使用&&、|等条件判断如果要增加条件,可以使用where子句注意:where子句没有智能提示多个可选项判断用,同

4、时判断多个可选项,判断之后要对可选项进行修改guardguard是与iflet相反的语法,Swift2.0推出在程序编写时,条件检测之后的代码相对是比较复杂的使用guard的好处能够判断每一个值在真正的代码逻辑部分,省略了一层嵌套1.3.45 witchswitch不再局限于整数switch可以针对任意数据类型进行判断不再需要break每一个case后面必须有可以执行的语句要保证处理所有可能的情况,不然编译器直接报错,不处理的条件可以放在default分支中每一个case中定义的变量仅在当前case中有效,而OC中需要使用1.4 循环oc风格for-in0.<10表示0到9范围0-10表

5、示0到101.5 字符串在Swift中绝大多数的情况下,推荐使用String类型String是一个结构体,性能更高String目前具有了绝大多数NSString的功能String支持直接遍历NSString是一个OC对象,性能略差Swift提供了String和NSString之间的无缝转换字符串拼接直接在""中使用'(变量名)的方式可以快速拼接字符串可选项的拼接如果变量是可选项,拼接的结果中会有Optional为了应对强行解包存在的风险,苹果提供了?操作符?操作符用于检测可选项是否为nil如果不是nil,使用当前值如果是nil,使用后面的值替代String&

6、Range的结合在Swift中,String和Range连用时,语法结构比较复杂如果不习惯Swift的语法,可以将字符串转换成NSString再处理1.6 集合1.6.1 数组定义使用口定义,forin遍历下标获取内容,let定义的为不可变数组,var定义的为可变数组数组的类型如果初始化时,所有内容类型一致,择数组中保存的是该类型的内容如果初始化时,所有内容类型不一致,择数组中保存的是NSObject数组的定义和实例化使用:可以只定义数组的类型实例化之前不允许添加值使用类型()可以实例化一个空的数组数组的合并必须是相同类型的数组才能够合并开发中,通常数组中保存的对象类型都是一样的!1.6.2

7、字典?定义同样使用口定义字典let不可变字典var可变字典String:NSObject是最常用的字典类型/:String:NSObject是最常用的字典类型vardict="name":"zhangsan","age":18?赋值?赋值直接使用dictkey=value格式?如果key不存在,会设置新值?如果key存在,会覆盖现有值/:*如果key不存在,会设置新值dict"title"="boss"/:*如果key存在,会覆盖现有值dict"name"="lis

8、i"dict?遍历?k,v可以随便写?前面的是key?后面的是value/:遍历for(k,v)indictprint("(k)(v)")?合并字典?如果key不存在,会建立新值,否则会覆盖现有值/:合并字典vardict1=String:NSObject()dict1"nickname"="大老虎"dict1"age"=100/:如果key不存在,会建立新值,否则会覆盖现有值for(k,v)indict1dictk=v)print(dict)2函数目标?掌握函数的定义?掌握外部参数的用处?掌握无返回类型

9、的三种函数定义方式代码实现?函数的定义?格式func函数名(行参列表)->返回值代码实现?调用letresult=函数名(值1,参数2:值2.)funcsum(a:Int,b:Int)->Intreturna+bletresult=sum(10,b:20)?没有返回值的函数,一共有三种写法?省略?()?Voidfuncdemo(str:String)->Voidprint(str)funcdemo1(str:String)->()print(str)funcdemo2(str:String)print(str)demo("hello")demo1(&

10、quot;helloworld")demo2("olleh")?外部参数?在形参名前再增加一个外部参数名,能够方便调用人员更好地理解函数的语义?格式:func函数名(外部参数名形式参数名:形式参数类型)->返回值类型代码实现?Swift2.0中,默认第一个参数名省略funcsum1(num1a:Int,num2b:Int)->Intreturna+bsum1(num1:10,num2:20)闭包与OC中的Block类似,闭包主要用于异步操作执行完成后的代码回调,网络访问结果以参数的形式传递给调用方目标?掌握闭包的定义?掌握闭包的概念和用法?了解尾随闭包

11、的写法?掌握解除循环引用的方法OC中Block概念回顾?闭包类似于OC中的Block?预先定义好的代码?在需要时执行?可以当作参数传递?可以有返回值包含self时需要注意循环引用闭包的定义?定义一个函数/:定义一个sum函数funcsum(num1numl:Int,num2:Int)->Intreturnnum1+num2sum(num1:10,num2:30)/:在Swift中函数本身就可以当作参数被定义和传递letmySum=sumletresult=mySum(num1:20,num2:30)?定义一个闭包?闭包=(行参)->返回值in/代码实现?in用于区分函数定义和代码实

12、现/:闭包=(行参)->返回值in/代码实现letsumFunc=(num1x:Int,num2y:Int)->Intinreturnx+ysumFunc(num1:10,num2:20)?最简单的闭包,如果没有参数/返回值,则参数/返回值/in统统都可以省略?代码实现letdemoFunc=print("hello")基本使用GCD异步?模拟在后台线程加载数据funcloadData()dispatch_async(dispatch_get_global_queue(0,0),()->Voidinprint("耗时操作(NSThread.cur

13、rentThread()")?尾随闭包,如果闭包是最后一个参数,可以用以下写法?注意上下两段代码,的位置funcloadData()dispatch_async(dispatch_get_global_queue(0,0)()->Voidinprint("论时操作(NSThread.currentThread()")?闭包的简写,如果闭包中没有参数和返回值,可以省略funcloadData()dispatch_async(dispatch_get_global_queue(0,0)print("耗时操作(NSThread.currentThread

14、()")自定义闭包参数,实现主线程回调?添加没有参数,没有返回值的闭包overridefuncviewDidLoad()super.viewDidLoad()loadDataprint("完成回调")/MARK:-自定义闭包参数funcloadData(finished:()->()dispatch_async(dispatch_get_global_queue(0,0)print("耗时操作(NSThread.currentThread()")dispatch_sync(dispatch_get_main_queue()print(&q

15、uot;主线程回调(NSThread.currentThread()")/执行回调finished()?添加回调参数overridefuncviewDidLoad()super.viewDidLoad()loadData4(html)->()inprint(html)/加载数据/完成回调-传入回调闭包,接收异步执行的结果funcloadData4(finished:(html:String)->()dispatch_async(dispatch_get_global_queue(0,0)print("加载数据(NSThread.currentThread()&q

16、uot;)dispatch_sync(dispatch_get_main_queue()print("完成回调(NSThread.currentThread()")finished(html:"<h1>helloworld</h1>")循环引用?建立NetworkTools对象classNetworkTools:NSObject/加载数据/-parameterfinished:完成回调funcloadData(finished:()->()print("开始加载数据”)/.finished()deinitprint

17、("网络工具88”)?实例化NetworkTools并且加载数据classViewController:UlViewControllervartools:NetworkTools?overridefuncviewDidLoad()super.viewDidLoad()tools=NetworkTools()tools?.loadData()print("comehere(self.view)”)/与OC中的dealloc类似,注意此函数没有()deinitprint("控制器88")运行不会形成循环引用,因为loadData执行完毕后,就会释放对self

18、的引用?修改NetworkTools,定义回调闭包属性/完成回调属性varfinishedCallBack:()->()?/加载数据/-parameterfinished:完成回调funcloadData(finished:()->()self.finishedCallBack=finishedprint("开始加载数据.”)/.working()funcworking()finishedCallBack?()deinitprint("网络工具88")运行测试,会出现循环引用解除循环引用?与OC类似的方法/类似于OC的解除引用funcdemo()weakvarweakSelf=selftools?.loadData()print("(weakSelf?.view)")?Swift推荐的方法loadDataweakselfinprint(&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论