当前位置:首页 > 后端开发 > 正文内容

swift 闭包实质,闭包表达式,跟随闭包

邻居的猫1个月前 (12-09)后端开发1390

1. 闭包

  • 一个函数和它所捕获的变量/常量环境组合起来,称为闭包

    • 一般指界说在函数内部的函数
    • 一般它所捕获的是外层函数的局部变量/常量
    typealias fn = (Int) -> Int
    func getFn() -> fn{
    	var count = 0
    		func sum(_ i: Int) -> Int{
        		count += i
        		return count
    		}
    	return sum
    }
    
    var f1 = getFn()
    
    f1(1)
    f1(1)
    f1(1)
    f1(1)
    

    成果:
    image
    解说:
    闭包能够运用其外层函数的局部变量,所以函数值能够添加
    实质:
    编译器给sum函数外层getFn函数的count特点分配了堆空间,所以count变量不会在getFn函数履行完后毁掉,因而sum函数能够对其进行拜访
    分配内存结构: 相似于给class分配的堆空间结构
    image

    • 能够把闭包幻想成一个目标的实例

      • 内存在堆空间
      • 捕获的局部变量/常量便是目标的成员
      • 组成闭包的函数便是类内部界说的办法
        相似与class的方式:
      class Closure{
      var count = 0
      	func sum(_ i:Int) -> Int{
      		count += i
      		return count
      	}
      }
      
      var c1 = Closure()
      c1.sum(1)
      c1.sum(1)
      c1.sum(1)
      

2. 闭包表达式

  • 语法:
    {
    	(参数列表) -> 回来值类型 in
    	函数体代码
    }
    
  • 简写:
    func exec(v1:Int, v2:Int, fn:(Int, Int) -> Int){
    	print(fn(v1, v2))
    }
    // 完好写法:
    exec(v1:10, v2:20, fn:{
    	(a1:Int, a2:Int) -> Int in
    	return a1 + a2
    })
    // 简写1
    exec(v1:10, v2:20, fn:{
    	a1, a2 in return a1 + a2
    })
    // 简写2
    exec(v1:10, v2:20,fn:{
    	a1,a2 in a1 + a2
    })
    // 简写3
    exec(v1:10, v2:20, fn:{ $0 + $1 })
    // 简写4
    exec(v1:10, v2:20, fn: + )
    // 跟随闭包: 是一个被书写在函数调用括号外面(后边)的闭包表达式
    // 假如一个很长的闭包表达式作为一个函数的 最终一个 实参,运用跟随闭包能够增强程序的可读性
    exec(v1:10, v2:20){ $0 + $1 }
    // 假如函数只要一个参数,且类型是函数类型,能够省掉括号
    func add(fn: (Int,Int) -> Int){
    	print(fn(1, 2))
    }
    add{ $0 + $1 }
    // 省掉参数
    add{ _,_ in 10 }  //省掉掉参数,固定回来10
    

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=219

标签: swift
分享给朋友:

“swift 闭包实质,闭包表达式,跟随闭包” 的相关文章

全网最适合入门的面向对象编程教程:60 Python面向对象归纳实例-传感器数据实时绘图器

全网最适合入门的面向对象编程教程:60 Python面向对象归纳实例-传感器数据实时绘图器

全网最适合入门的面向目标编程教程:60 Python 面向目标归纳实例-传感器数据实时绘图器 摘要: 本文将结合之前内容完结模仿一个传感器系统软件,包括三个线程:传感器线程生成数据并经过串口发送给主机进程;主机进程经过串口接纳指令,进行数据滤波和处理后,将处理结果发送给绘图线程;绘图线程担任接纳数...

swift编程,入门指南与最佳实践

1. 变量和常量:在 Swift 中,变量和常量都需要明确声明其类型。变量使用 `var` 关键字声明,常量使用 `let` 关键字声明。2. 数据类型:Swift 支持多种数据类型,包括整型(Int)、浮点型(Float、Double)、布尔型(Bool)、字符串(String)等。3. 控制流:...

go-live,什么是Go-Live?

go-live,什么是Go-Live?

“Go live”通常有几种不同的含义,具体取n2. 活动或项目启动:在某些情况下,“go live”也用于描述一个活动或项目的正式启动。例如,一个公司可能会宣布某个新服务或产品“go live”,意味着该服务或产品开始正式提供。3. 实时互动或直播:在娱乐或活动策划领域,“go live”可以指...

python机器学习,从基础到实践

python机器学习,从基础到实践

当然可以,机器学习是Python编程中的一个重要领域,它涉及到使用算法从数据中学习,以便做出预测或决策。Python有许多流行的库和框架,如scikitlearn、TensorFlow和PyTorch,可以用于机器学习。如果你对机器学习感兴趣,我可以帮助你学习基础知识,包括数据预处理、特征工程、模型...

有关go的短语,go的短语归纳大全初中

有关go的短语,go的短语归纳大全初中

1. Go ahead 请继续,往前走2. Go for it 尽管去做,试试看3. Go with the flow 顺其自然,随波逐流4. Go the extra mile 额外努力,做得更多5. Go out on a limb 冒险尝试,承担风险6. Go back to squ...

c语言程序设计,基础入门与进阶指南

好的,请问您想了解C语言程序设计的哪个方面?例如语法、数据结构、算法、编程实践等。我会尽力为您提供相关的信息。C语言程序设计:基础入门与进阶指南C语言作为一种历史悠久且广泛使用的编程语言,在计算机科学领域占据着举足轻重的地位。本文将为您介绍C语言程序设计的基础知识,帮助您从入门到进阶,掌握这一强大的...