每天学一点Swift----函数(一)

43 篇文章 0 订阅
42 篇文章 0 订阅

1. Swift中支持嵌套函数。

  2.与函数紧密相关的另一个概念是闭包,闭包的本质是匿名函数,闭包可以作为表达式,函数参数或函数返回值。因此使用闭包可以让程序更加简洁。

  

  .函数入门

  1. 函数的定义和调用:定义函数时要使用关键字:func

  func max(x:Int, y:Int) -> Int

  var result = max(5, 9)

  

  2. 函数的返回值:如果希望明确指定函数没有返回值,则有如下3种方式

  1)直接省略 “->类型部分

  2)使用 “->()”返回一个空元组声明没有返回值

  3)使用“->Void”表示没有返回值

  

  3. Swift中返回多个值:只要将返回的类型声明为元组类型,举个栗子

  func getmultiValue(nam:Double) -> (String, String)

  {

  var a = 123

  var b = 456

  

  return ("\(a)", "\(b)")

  } 

  ---- 类型java返回一个Javabean

  

  4. 递归函数:函数调用自身。

  

  .函数的形参----外部形参名及其简化形式以计算矩形面积为例,普通的定义函数为:

  func getArea(width : Double, height : DOuble) -> Double

  {

  return width * height;

  }

  调用函数: var area = getArea(3, 8)

  上面函数中的形参只能在函数内部使用,因为它们是局部变量。在调用时不能看出各个形参含义。

  

  2. Swift允许在调用方法时指定参数名----这种可以在调用函数时起作用的形参名,被称为外部形参名。

  

  3. 如果希望Swift在调用函数时也可以指定外部形参名,则需要在定义函数时也声明外部形参名----外部形参名写在局部形参的前面,中间用空格分隔。举个栗子:

  func getArea( width : Double, height : Double)

  {

  return width * height;

  }

  

  调用: var area = getArea(:3,:7)

  

  4. 如果定义函数时指定了外部形参名,那么在调用函数时就必须使用外部形参名。

  

  5. 使用简化外部形参:大部分清空下,定义的局部形参民已经可以很好地说明参数用途了,此时如果希望外部形参名同局部形参名保持一致,在布局形参名之前加#即可。举个栗子:

  func getArea(#width : Double, #height : Double)

  {

  return width * height;

  }

  调用函数: var area = (width:3, height:5)

  

  6. Swift也允许只为函数的部分形参指定外部形参名。举个栗子:

  func getArea(#width : Double, height : Double)

  {

  return width * height;

  }

  调用函数: var area = (width:3, 5)

  

  

  .函数的形参----形参默认值:

  1. 在某些情况下,程序需要在定义函数为部分形参指定默认值----这样调用函数时就可以省略该形参,而是直接使用该形参的默认值。

  

  2. 举个栗子:

  func getArea( width : Double = 3.4, height : Double)

  {

  return width * height;

  }

  调用函数:

  var area1 = (5)   //结果是 3.4 * 5

  var area2 = (:2, 5) //结果是 2 * 5

  

  3. Swift建议把带默认值的形参放在函数形参列表的后面。

  

  4. 如果定义函数时没有为带默认值的形参指定外部形参名,则Swift会自动为该形参加一个和该形参名相同外部形参名,就像在该形参名前面加#一样。举个栗子;

  func getArea(width : Double, height : Double = 5)

  {

  return width * height;

  }

  调用函数:

  var area1 = (3)   //结果是 3 * 5

  var area2 = (5height6) //结果是 5 * 6

  

  5. 因为在调用定义了外部形参名的函数时,必须使用外部形参名。所以如果程序希望取消带默认值形参的外部形参名时可以显式地使用下划线作为外部形参名,这样可以取消带默认值形参的外部形参名。举个栗子:

    func getArea(width : Double, _ height : Double = 5)

  {

  return width * height;

  }

  调用函数:

  var area1 = (5)   //结果是 3.4 * 5

  var area2 = (2, 5) //结果是 2 * 5

  

  

  .函数的形参----个数可变的形参

  1. java中一样,使用三个点表示该形参类型的个数是不确定数量的多个。

  

  2. 一个函数的形参列表中只能有一个个数可变的形参。

  

  3. 个数可变的形参只能放在函数形参列表的最后。

  

  

  .函数的形参----常量形参和变量形参

1. 函数形参默认是常量

  

  2. 在某些情况下,程序希望直接使用函数形参作为变量从而避免在函数内部额外重新定义新的变量,此时可以用关键字var声明函数形参。举个栗子:

    func getArea(width : Double, var #height : Double)

  {

  width = width * height

  return width;

  }

  调用函数:

  var area1 = (5)   //结果是 3.4 * 5

  var area2 = (2, height:5) //结果是 2 * 5

  var width = 20;

  var area3 = (20, height:5) //结果是20width的值----注意形参和实参的区别

  

3. 需要注意的是如果传递该函数的参数是值类型的,由于Swift只是将参数的副本传入,因此在函数体内对形参的操作不会对参数本身产生任何影响。所以上面area3的值是20



.函数的形参----In-Out形参

  1. 对于传入的参数是值类型的,在函数体内的任何操作都对原来的变量不会产生影响,如果程序确实需要值类型的参数传入函数内部,则可以使用In-Out参数,通过inout关键字可以声明In-Out参数。举个栗子:

  func swap(inout a : Int, inout b : Int)

  {

  let temo = a;

  a = b;

  b = temp;

  }

  var a = 3

  var b = 6

  print(a, b)  // 输出3 6

  swap(&a, &b)

  print(a, b)  //输出6 3

  

  2. 可以看出,定义了In-Out参数后,程序在调用函数时通过在变量名前加前缀&即可把擦数传递给函数----其实就是C语言中的指针和地址的关系。但是可以看出,这里使用的时候比C语言中的*p&a方便多了。

  

  3. 对于引用类型的参数传递,In-Out参数同样有作用,但是这里注意的是:虽然两种方法都是对引用类型指向的实际对象进行操作,但是不使用In-Out参数时,传入的是引用的副本,使用了In-Out参数时使用的引用的本身,此时仍然需要用&前缀。

  

上一篇: 每天学一点Swift----集合(二)

下一篇:每天学一点Swift----函数(二)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值