Swift开发标准教程-函数和闭包_第1页
Swift开发标准教程-函数和闭包_第2页
Swift开发标准教程-函数和闭包_第3页
Swift开发标准教程-函数和闭包_第4页
Swift开发标准教程-函数和闭包_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

函数和闭包6.1函数介绍6.2使用无参函数6.3使用有参函数6.4函数参数的特殊情况6.5函数的返回值6.6函数类型6.7标准函数6.8函数的嵌套6.9闭包6.10综合案例6.11上机实践6.1函数介绍6.1.1函数的功能6.1.2函数的形式6.1.1函数的功能在编程中使用函数会给开发带来很多的好处。以下总结了其中两点。1.结构鲜明,便于理解如果在一个程序中代码很多很长,实现的功能也不相同,可以将每一个功能的代码段提取出来作为一个函数使用。这样就可以使程序结构鲜明,便于理解。2.减少代码的编写量以及时间在编程中,如果有相同功能的代码段可以将其提出,作为一个函数。这样,可以使代码编写量减少,从而缩短了开发时间。6.1.2函数的形式一个完整的函数由func关键字、函数名、参数表以及函数的返回值类型组成。6.2使用无参函数6.2.1无参函数的声明定义6.2.2无参函数的调用6.2.3空函数6.2.1无参函数的声明定义函数在使用之前必须要对其进行声明和定义。它的声明和定义是在一起进行的。声明定义的一般形式如下:func函数名()->返回值类型{语句}6.2.2无参函数的调用执行函数功能的唯一手段就是调用函数。要想执行无参函数,就需要对声明定义好的函数进行调用。调用无参函数的一般形式如下:函数名()6.2.3空函数空函数是函数中最简单的形式。在空函数中,函数只有一个空壳,里面是没有任何语句。当开发者还没有想到要写什么样子的程序时,可以使用空函数。等想好要编写的程序后,再为空函数去添加内容。它声明定义的一般形式如下:func函数名(){}6.3使用有参函数6.3.1有参函数的声明定义6.3.2有参函数的调用6.3.3参数的注意事项6.3.1有参函数的声明定义有参函数声明定义的一般形式如下:func函数名(参数名1:数据类型,参数名2:数据类型,……)->返回值类型{语句}6.3.2有参函数的调用有参函数声明定义后,就可以调用了,其调用的一般形式如下:函数名(参数值1,参数名2:参数值2,…)6.3.3参数的注意事项在使用参数时,需要小心,避免出现问题。以下将讲解开发者在使用函数进行编程时常出现的两个问题。1.参数个数函数在声明定义时的参数要和调用时的参数个数一致。否则,就会出现错误。2.参数顺序声明定义时的参数顺序一定要和调用时的参数顺序一致,否则就会出现错误,或者是逻辑上的错误。6.4函数参数的特殊情况6.4.1函数参数名6.4.2指定外部参数名6.4.3忽略外部参数名6.4.4为参数设置默认值6.4.5可变参数6.4.6常量参数和变量参数6.4.7输入-输出参数6.4.1函数参数名函数参数都有一个外部参数名(externalparametername)和一个本地参数名(localparametername)。外部参数名用来标记传递给函数调用的参数,本地参数名在实现函数的时候使用,即在函数内部使用。如以下的代码片段:funcsomeFunction(firstParameterName:Int,secondParameterName:Int){

//functionbodygoeshere

//firstParameterNameandsecondParameterNamereferto

//theargumentvaluesforthefirstandsecondparameters}someFunction(1,secondParameterName:2)6.4.2指定外部参数名外部参数名是为了让函数中的参数明确、以及便于理解。外部参数名需要写在本地参数名之前,并使用空格将其分开。它的一般形式如下:func函数名(外部参数名本地参数名:数据类型)->返回值类型{

……}6.4.3忽略外部参数名如果开发者不想为第二个及后续的参数设置外部参数名,用一个下划线(_)代替一个明确的参数名。它的一般形式如下:func函数名(本地参数名1:数据类型,_本地参数名1:数据类型)->返回值类型{

……}6.4.4为参数设置默认值开发者可以在函数体中为每个参数定义默认值(DeafultValues)。当默认值被定义后,调用这个函数时可以忽略这个参数。6.4.5可变参数使用可变参数,可以使一个参数接受零个或多个指定类型的值。函数调用时,开发者可以用可变参数来指定函数参数,这样就可以被传入不确定数量的输入值。设定一个可变参数需要在参数类型名后添加“...”。6.4.6常量参数和变量参数在函数中,参数默认都是常量,常量的值是不可以改变的。如果想要改变参数中的值,需要将常量参数改变为变量参数。变量参数的定义就是在参数名前使用一个var关键字。6.4.7输入-输出参数以上函数中所使用的参数只可以在函数内部发生改变。如果开发者想用一个函数来修改参数的值,并且想让这些变化在函数调用后仍然有效。这时,需要定义输入-输出参数。它的定义是通过在参数名前加入inout关键字。其语法形式如下:func函数名(inout参数名:数据类型,……){

…}输入-输出参数都有一个传递给函数的值,将函数修改后,再从函数返回来替换原来的值。其调用形式如下:函数名(&参数,……)6.5函数的返回值6.5.1具有一个返回值的函数6.5.2具有多个返回值的函数6.5.3可选元组返回类型6.5.4无返回值6.5.1具有一个返回值的函数在一个函数中,返回一个值是最常见到的,也是最为简单的。开发者希望在函数中返回某一数据类型的值,必须要在函数声明定义时为函数设定一个返回的数据类型,并使用return语句进行返回。其中,return语句的一般表示形式如下:return表达式其中,表达式可以是符合Swift标准的任意表达式。而具有返回值的函数声明定义形式如下:func函数名(参数列表)->返回值类型{语句

return表达式}6.5.2具有多个返回值的函数在Swift中,函数不仅可以返回一个返回值,还可以返回多个,这时就需要使用到元组类型。其语法形式如下:func函数名(参数列表)->(返回值1:数据类型,返回值2:数据类型,返回值3:数据类型,…){

……

return(返回值1,返回值2,返回值3,…)}6.5.3可选元组返回类型函数返回的元组类型有可能整个元组都“没有值”,开发者可以使用可选的元组返回类型来反映整个元组可以是nil的事实。开发者可以通过在元组类型的右括号后放置一个问号来定义一个可选元组。6.5.4无返回值在一个函数中可以有返回值类型,也可以没有返回值类型,在6.5节之前,我们使用的程序都是没有返回值类型的。没有返回值的类型不需要定义返回值类型,并且也不需要出现return语句。如果出现return语句,反而会造成程序错误。6.6函数类型6.6.1使用函数类型6.6.2使用函数类型作为参数类型6.6.3使用函数类型作为返回值类型6.6.1使用函数类型函数类型作为一种类型,开发者可以像任何其他类型一样使用它。其语法形式如下:let/var常量名/变量名:函数类型=函数名或者let/var常量名/变量名=函数名6.6.2使用函数类型作为参数类型开发者可以用(Int,Int)->Int这样的函数类型作为另一个函数的参数类型。这样可以将函数的一部分实现留给函数的调用者来提供。6.6.3使用函数类型作为返回值类型开发者可以用函数类型作为另一个函数的返回类型,此时需要做的是在返回箭头(->)后写一个完整的函数类型。其语法形式如下:func函数名(参数列表)->函数类型{

…}6.7标准函数6.7.1绝对值函数abs()6.7.2最大值函数max()/最小值min()6.7.3序列排序函数sortInPlace()6.7.4序列倒序函数reverse()6.7.1绝对值函数abs()abs()函数可以用来求取一个数值的绝对值,其语法形式如下:abs(数值)6.7.2最大值函数max()/最小值min()在编程中,经常需要计算几个参数的最大值或者最小值,此时可以使用标准函数中的max()和min()函数实现。以下是对这两个函数的详细讲解。1.max函数max()函数可以获取几个参数的最大值。其语法形式如下:max(参数1,参数2,参数3,…)2.min函数min()函数可以获取几个参数的最小值。其语法形式如下:min(参数1,参数2,参数3,…)6.7.3序列排序函数sortInPlace()在编程中,经常需要对序列中元素的进行排序。此时可以使用Swift中的sortInPlace()函数来实现,此方法可以让序列中元素按照升序排列。其语法形式如下:序列.sortInPlace()6.7.4序列倒序函数reverse()reverse()函数可以将序列中元素的倒序排列。其语法形式如下:序列.reverse()6.8函数的嵌套6.8.1嵌套调用6.8.2递归调用6.8.1嵌套调用函数的嵌套就是在函数定义时,调用了一个或多个其它的函数。6.8.2递归调用递归调用是嵌套调用的一种特殊情况。它在调用函数的过程中调用了该函数本身。6.9闭包6.9.1闭包表达式6.9.2Trailing闭包6.9.3捕获值6.9.1闭包表达式闭包表达式是一种利用简洁语法构建内联(内联类似与C语言中的宏定义)闭包的方式。闭包表达式(闭包函数)的语法形式如下:{(参数列表)->返回值类型in语句}1.无参闭包表达式无参形式的闭包表达式语法形式如下:{()->返回值类型in语句}声明定义无参闭包表达式的语法形式如下:let/var闭包表达式常量名称/闭包表达式变量名称/=无参形式的闭包表达式它调用的语法形式如下:闭包表达式常量名称/闭包表达式变量名称()2.有参闭包表达式具有参数的闭包表达式的语法形式如下:{(参数名1:数据类型,参数名2:数据类型,…)->返回值类型in语句}声明定义有参闭包表达式的语法形式如下:let/var闭包表达式常量名称/闭包表达式变量名称/=具有参数的闭包表达式它的调用形式如下:闭包表达式常量名称/闭包表达式变量名称(参数值1,参数值2…)6.9.2Trailing闭包尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。如果您需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强函数的可读性。Trailing闭包的一般形式如下:funcsomeFunctionThatTakesAClosure(closure:()->()){

//函数主体部分}//以下不是使用trailing闭包进行的函数调用someFunctionThatTakesAClosure({//闭包主体部分})//以下是使用trailing闭包进行的函数调用someFunctionThatTakesAClosure(){//闭包

温馨提示

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

评论

0/150

提交评论