Object-C--->Swift之(七)嵌套函数与闭包

简介:

嵌套函数

函数分为全局函数和局部函数,前面已经介绍了全局函数,下面介绍下局部函数,定义在函数体内部的函数可以成为嵌套函数。
注意:嵌套函数对外是隐蔽的,只能在其封闭函数内有效,嵌套函数只能在其封闭函数内有效,其封闭函数也可以返回嵌套函数,以便于程序在其他作用域内使用嵌套函数。

func Math(#type:String)->(Int)->Int
{
 func square(val:Int)->Int
 {
  return val*val
}
  func cube(val:Int)->Int
  {
    return val*val*val
  }
  switch(type)
  {
    case "square":
    return square
    case "cube":
    return cube
    default:
    print("没有该函数")
  }
}
var mathFunc=Math(type:"cube")//先得到cube函数,调用权利给mathFunc
print(mathFunc(5))调用cube函数,输出125
var mathFunc=Math(type:"square")//先得到square函数,调用权利给mathFunc
 print(mathfunc(5))调用square函数,输出25

闭包

闭包是一种新的语法,跟Object-C的代码块一样,更加灵活性。

其实函数也可以算的上闭包处理

* 全局函数是一个有名称、但不会捕捉任何值的闭包。
* 嵌套函数是一个有名字、可以捕获封闭函数体的值的闭包。
* 闭包表达式是一个简单的、可以捕获封闭函数体的值的匿名闭包。

    func Math(#type:String)->Int->Int
    {
     switch(type)
     {
     case "square":
     return {(val:Int)->Int in
      return val*val
  }
     case "cube":
     return {(val:Int)->Int in
     return val*val*val
     }
     default:
       print("没有该函数")
         }
        }
    var mathFunc=Math(type:"cube")
    print(mathFunc(5))

闭包与嵌套函数存在的区别
* 定义闭包无须func关键字,无须制定函数名。
* 定义闭包需要额外使用in关键字。
* 定义闭包的第一个花括号要移到形参列表的圆括号之前。
标准语法如下:

    {
    (形参列表)->返回值类型 in
    //核心代码 
    }

闭包的本质是更加灵活的代码块,因此完全可以将闭包赋值给变量或直接调用闭包。

var square={(val:Int)->Int in
return val*val
}
print(square(5))
var result=(#base:Int,#exponent:Int)->Int in
var result = 1
for i in 1...exponent
{
 result *=base
}
return result
}(4,3)
print(result)

上面两个闭包函数,第一个是先声明再调用,第二个是声明后直接调用
注意目前Swft中闭包的外部形参名没有任何意义。

几种简化方法

省略形参列表、返回值类型
//使用闭包表达式,由于程序定义square变量的类型
//所以swift可以推断闭包表达式的形参列表、返回值类型

    var square:(Int)->Int ={(var) in return val*val}

//省略形参类型后,也可省略形参列表的圆括号,即可简化成

var square:(Int)->Int={var in return val*val}
print(square(5))//输出25
省略return

如果闭包表达式只有一行代码,并且这行代码的返回值将作为闭包表达式的返回值,那么可以省略

目录
相关文章
|
5天前
|
Swift UED
Swift 中使用闭包处理事件
【10月更文挑战第20天】使用闭包来处理事件在 Swift 编程中是一种非常常见和有效的方式。它提供了简洁、灵活和高效的解决方案,使我们能够更轻松地实现各种交互功能。通过深入理解闭包的原理和应用方法,我们可以更好地利用闭包来处理各种事件,提升应用的用户体验和开发效率。
|
4月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
59 7
|
5月前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
94 5
Swift开发——简单函数实例
|
6月前
Swift4.0判断本函数是否在其它类有相同的方法
Swift4.0判断本函数是否在其它类有相同的方法
42 0
|
6月前
|
存储 API Swift
【Swift开发专栏】Swift函数与闭包的实战应用
【4月更文挑战第30天】本文介绍了 Swift 中函数和闭包的实战应用。首先,函数的基本使用包括定义、参数与返回值、函数类型以及高级技巧如嵌套函数。接着,讨论了闭包的语法,包括无名函数、作为函数参数、简写形式和尾随闭包。最后,展示了函数和闭包在实战中的应用,如排序过滤集合和处理异步任务的回调。
45 0
|
6月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
115 1
|
6月前
|
Swift
Swift中的函数
Swift中的函数
42 1
|
6月前
|
存储 Swift
Swift中,函数和闭包
Swift中,函数和闭包
63 1
|
Swift
swift 闭包简写实际参数名$0、$1等理解
swift 闭包简写实际参数名$0、$1等理解
90 0

相关课程

更多