Object-C--->Swift之(七)丰富的函数形参功能-阿里云开发者社区

开发者社区> xinxinit> 正文

Object-C--->Swift之(七)丰富的函数形参功能

简介:
+关注继续查看

前面我们介绍了函数的入门语法,今天就仔细学习下函数的形参功能

经典款式

    func addDouble(a:Float,b:Float)->Float
    {
     return a+b
    }

这个函数最经典的样式,实现了两个数的相加的功能

外部参数

我们在实际项目开发中类似这样的函数给形参传值的时候因没有介绍性的语句会出现传参错误。于是Swift保留了Object-C的优秀传统,在函数声明中可以指定外部参数名,具体代码如下

  外部形参名 局部形参名:形参类型

func addDouble(first a:Float,second b:Float)->Float
 {
    print(a+b)
    return a+b;
}

调用传值的时候是这样的:

  addDouble(first: 10, second: 20)

这样带有解释性的外部参数名就更加方便程序员的编码安全和效率。

形参默认值

我们定义函数的时候还可以为函数传入形参默认值,这时候我们调用函数的时候既可以给形参传值也可以省略传值,直接用默认值。代码如下:

    [外部形参名] 局部形参名:形参类型=默认值

    func addDouble1(a:Float=20.0, b:Float=10.0)->Float
   {
        return a+b
   }
     addDouble1()
    addDouble1(30,b: 40)

个数可变的形参

SWift函数中参数个数也是可以变化的,我们可以通过在最后一个参数类型后面加入(…)的方式来指示可变参数。例如:

 func addNnumber(nNumber:Float...)->Float
{
    var results:Float=0
for number in nNumber
{
    results += number
    }
   return results
}

变量形参

Swift函数中默认的形参是常量的,所以我们不能够在函数内部重新改变形参的值,所以为了解决这个问题,我们可以在形参名称前面加上var关键字,这样就可以改变形参的值了。

func addDouble2(var a:Float=20.0,b:Float=10.0)->Float
{ 
    a=a+b
   return a+b
}

In-Out形参

函数依然和前面数组和字典一样是值传递,也就是说函数参数传入函数内部只是传入参数的副本,内部改变形参值,将不影响实参值的变化

为了解决这个问题,我们将引入一个新的语法In-Out参数,这个功能类似于C语言上的引用类型,如果C语言这方面有所遗忘,可以参考我的这篇博客 C、C++动态分配函数暨几种参数传递疑难解析

 func swap(inout a:Float,inout b:Float)
{
 let  temp = a
    a=b
    b=temp
}

    var a:Float = 10.0
    var b:Float = 20.0
    print("交换前:a的值\(a),b的值\(b)")
    swap(&a,b: &b)
    print("交换后:a的值\(a),b的值\(b)")

注意要用到&符号

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
void 类型的指针|学习笔记
快速学习 void 类型的指针
3 0
更快的Maven来了,我的天,速度提升了8倍!(3)
更快的Maven来了,我的天,速度提升了8倍!(3)
29 0
C 语言项目_项目流程|学习笔记
快速学习 C 语言项目_项目流程
6 0
阿里云飞天加速计划ecs服务器试用体验
关于阿里云飞天加速计划ecs服务器的试用体验
9 0
MySQL MGR模式介绍
MGR是Mysql Group Replication(组复制)的缩写,Mysql5.7之后是以一个Mysql插件的形式集成在Mysql中,用于创建可伸缩、高可用、可容错的复制架构,是Mysql集群的一种形式
10 0
更快的Maven构建工具mvnd和Gradle哪个性能更好?(3)
更快的Maven构建工具mvnd和Gradle哪个性能更好?(3)
23 0
常量和变量_helloworld 程序|学习笔记
快速学习常量和变量_helloworld 程序
3 0
常量和变量_getchar函数|学习笔记
快速学习常量和变量_getchar函数
3 0
常量和变量_C语言简介|学习笔记
快速学习常量和变量_C语言简介
4 0
前后端分离 -- 深入浅出 Spring Boot + Vue 实现工程项目进度管理系统 Vue不过如此~
前后端分离 -- 深入浅出 Spring Boot + Vue 实现工程项目进度管理系统 Vue不过如此~
7 0
+关注
113
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载