每天学一点Swift----闭包(一)

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

.嵌套函数

  1. Swift还支持在函数体内定义函数,这种在函数体内定义的函数称为嵌套函数

  

  2. 默认情况下,嵌套函数对外部是隐藏的。嵌套函数只能在其封闭函数内有效,其封闭函数也可以返回嵌套函数类型,以便程序在其他作用域中使用嵌套函数。----举个栗子:重新改写得到square函数或其他函数的例子

  //定义函数,该函数的返回值类型为Int-> Int

  func getMathFunc(#type : String) -> (Int) -> Int

  {

  //定义一个计算平方的函数

  func square(val : Int) -> Int

  {

  return val * val

  }

  //定义计算立方的函数

  func cube(val : Int) -> Int

  {

  return val * val * val

  }

  //定义一个计算阶乘的函数

  func factorial(val : Int) -> Int

  {

  int result = 1;

  for index in 2...val

  {

  result *= index

  }

  return result

  }

  

  //该函数返回的是嵌套函数

  switch(type)

  {

  case "square":

  return square

  case "cube":

  return cube

  default:

  retun factorial

  }

  

  }

//调用函数getMathFunc后,该函数返回的是一个函数

  var fun1 = getMathFunc(type : "square") //得到square函数

  var fun2 = getMathFunc(type : "cube") //得到cube函数

  var fun3 = getMathFunc(type : "other") //得到factorial函数 

  



  .嵌套函数与闭包

  1. 闭包是现代编程语言争相引入的一种语法,如果说函数是命名,方便复用的代码块,那么闭包则是功能更灵活的代码块,它可以在程序中被传递和调用。

  

2. swift中的闭包类似于Objective-C中的代码块和Javac#中的Lambda表达式。

  

  3. 从另一个角度看,函数也可以被当成闭包进行处理:

  1)全局函数是一个有名称、但不会捕获任何值的闭包

  2)嵌套韩式是一个有名字、可以捕获封闭函数体的值的闭包

  3)闭包表达式则是一个简洁的、可以捕获封闭函数体的值的匿名闭包。

  

  4. 回顾嵌套函数;

  对于第五点中的嵌套函数来说,3个嵌套函数的函数名的作用域仅仅就是在switch中,一旦离开了getMathFunc函数后, 3个嵌套函数的函数名就没有用了。既然嵌套函数的函数名没有太大的意义,那么就可以考虑使用闭包表达式来简化嵌套函数的写法。

  

  5. 使用闭包表达式代替嵌套函数。举个栗子:对上面的例子进行修改

  func getMathFunc(#type : String) -> (Int) -> Int

  {

  //该函数返回的是闭包

  switch(type)

  {

  case "square":

  return {(val : Int) -> Int in //****使用in来代替了原来的函数的大括号

  return val * val

  }

  case "cube":

  return { (val : Int) -> Int in

  return val * val * val

  }

  default:

  return { (val : Int) -> Int in

  var result = 1

  for index in 2...val

  {

  result *= index

  }

  return result

  }

  }

  }  

  可以看出,在两次的switch代码块中,除了在声明函数格式那里不同之外,函数体内的代码块和闭包表达式内的代码块是完全相同的。

  

  6. 定义闭包和嵌套函数只是存在如下3点区别:

  1)定义闭包不需要func关键字,不需要指定函数名

  2)定义闭包需要使用关键字in来代替函数的大括号

  3)定义闭包的第一个花括号要移到形参列表的圆括号之前


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

下一篇:每天学一点Swift----闭包(二)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值