老猫swift学习笔记(四):函数

上一篇我们学习了数组,现在我们来学习一下函数

在swift中采用func关键字来声明一个函数,现在我们来写一个最简单的函数,就跟当年学helloworld一样的......


这里省略一百字。。。。。大家自己建个工程,然后写下以下这个最简单的函数

  1. func sayHello(){

  2.     println("Hello swift开发者 www.swift-open.cn")
  3. }

  4. sayHello()
复制代码

然后 run。。。。。。。看下结果
 


耶斯!!!!看到没 已经输出  Hello swift开发者 www.swift-open.cn 


这是一个最简单的函数,没有参数,没有返回值,那现在我们就写一个带参数跟返回值的函数
  1. //带参数且有返回值
  2. func sayHello(str:String,str2:String)->String{
  3.     
  4.     return str + " "+str2
  5. }

  6. println(sayHello("Hello","www.swift-open.cn"))
复制代码
结果:
 



好了,这个有参数,有返回类型的swift函数我们又实现了,但学过java语言或者其他的语言的同学应该知道,其函数(其他语言叫方法,都一个意思)一般都有可变参数,默认参数这功能,那swift有没有呢,肯定有的,好,现在我们一起实现这个牛逼的函数:

我们现在要实现一个加法的函数,用户传入多少个数字,我们在内部给他计算出其的和,然后将其起结果返回
  1. //可变参数
  2. func add(numbers:Int...)->Int{

  3.     var sum:Int = 0
  4.     for item in numbers{
  5.         sum = sum+item
  6.     }
  7.     return sum
  8. }
  9. println(add(1,2))
  10. println(add(1,2,3,4,5))
复制代码


 


swift函数其可变参数也是用三个点来表示的,实质上就是一个数组,所以中间我们用了一个for in来循环迭代计算出其结果

好接下来在看下默认参数的写法:
  1. //默认参数
  2. func defaultParameter(name:String,address:String = "beijing")->String{
  3.     return name + " " + address
  4. }

  5. println(defaultParameter("laomao"))
  6. println(defaultParameter("laomao",address:"china"))
复制代码
默认参数,把默认值直接写在参数后面就可以了,如以上 当我们不传address这个参数时,就用我们之前给他的默认值“beijing”,对了这里涉及到一个参数的标签问题,我给大家讲下这个标签的意思
比如我们现在定义一个函数,带着参数,当用户调用这个函数,有时用户往往对你这个参数到底是啥不是很清楚,所以这时标签就用上了,如以下两个函数,一个带标签,一个没带
  1. func person1(height:Int ,weight:Int){

  2. }
  3. func person2(height h:Int ,weight w:Int){
  4.     
  5. }
  6. person1(175, 130)
  7. person2(height: 175, weight: 130)
复制代码

根据以上代码,可以看出 person2由于带着标签一下子就看出一个参数是身高 一个是体重的意思,好了,关于标签就说到这了,注意下,如果你使用了标签,调用传参时就一定要带标签,为了代码的可读性,建议大家以后都带标签,这也是苹果官方推荐的写法!


这里就给出一下刚才默认参数函数的结果:
 


唉!!!!!累死了!!!!
现在前面大家介绍了函数,函数的可变参数 , 默认值 ,还有标签,现在给大家介绍一个,swift语言函数里有个特殊的用法,就是可以返回多个值,采用元组的方式来返回!,由于这个比较简单  我就直接给大伙贴上代码了

  1. //返回多个数值
  2. func getNet()->(String,String,String){
  3.     
  4.     return ("www.","swift-open",".cn")
  5.     
  6. }
  7. var(a,b,c) = getNet()
  8. println("swift社区论坛:\(a)\(b)\(c)")
复制代码

 



好了继续。。。。。这里在给大家说个小知识点,就是swift函数的形参默认是常量,所以如果你在函数体内如果试图修改他,编译器就给你报错了,好这个给大家示范一下
 

大家看到了吧,我在里面试图修改他值,这个牛逼的xcode就给我报错了,根据提示,就是说形参是常量不能改,所以报错,那要咋样才能改呢,估计大家想到了,就是在参数面前给他加个var 就搞定了!
好,继续贴代码,上图.。。。。。。。。
  1. //函数体内改变函数形参
  2. func changeParameter(var name : String)->String{
  3.     name = "Hello " + name
  4.     return name
  5. }

  6. println(changeParameter("swift-open"))
复制代码

 



好 ,剩下在跟大家一起学习一下函数的另一个知识点,就是让 函数改变形参值,比如你在外面定义两个数,通过函数进行交换后,外面的两个数也交换了。这种 调用 函数 结束后保持形参值的改变,我们可以在形参前面加个关键字inout。。。。。来写个例子 大家就明白了
  1. var x:Int = 10
  2. var y:Int = 20
  3. //交换两个值
  4. func swap(var a:Int,var b:Int){
  5.     var temp = a
  6.     a = b
  7.     b = temp
  8. }
  9. //千万不能忘记&了
  10. swap(&x, &y)

  11. println("x=\(x);y=\(y)")
复制代码

 
大家看到了吧 x y 改变了!!!!
这里  提示:in-out 参数不能有默认值,可变参数的参数也不能被标记为 inout。如果您标记 参数为 inout,它不能同时被标记为 var 或 let。


好了 关于函数,老猫今天就跟大家一起学习到这了,有什么疑问可以加入QQ群 swift开发者技术群 113923412,或者在回复里面留言,我们共同讨论,共同进步

上一篇:老猫swift学习笔记(三):数组

本文来自 swift开发者,转载必须注明来自swift开发者(www.swift-open.com),且留下文章链接!
谢谢大家!

你可能感兴趣的:(xcode,swift,swift社区,swift教程)