【Swift4】(6) 闭包 | 闭包应用 | 闭包作为函数参数 | 捕获特性

Swift编程中闭包的全面指南 本文还有配套的精品资源,点击获取 简介:闭包是Swift语言中强大的特性,它提供了一种定义匿名函数的方式,并能捕获其上下文中的变量。本文将探讨Swift中闭包的定义、用法和实现。将介绍闭包的基本语法、作为函数参数和返回值的应用、捕获列表特性、闭包表达式的简化语法、以及闭包在异步操作和尾随闭包中的应用。通过学习这些内容,可以帮助开发者提高Swift编程能力,并在实际项目中有效... 阅读详情

⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展。博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

闭包 Closure

闭包的基本使用与简写

  • 语法优化
var myClosure:() -> Void = {
    print("Hello world")
}

myClosure()

var mySecondClosure:(Int,Int) -> Int = {
    (a:Int,b:Int) -> Int in //闭包标准写法
    return a*b
}

mySecondClosure = {
    (a,b) in //闭包简写,类型自动推导 可以根据参数推断
    return a*b
}

mySecondClosure = {
    (a,b) in //进一步闭包简写,如果函数体只包含一句 return 代码,可省略 return
    a*b
}
mySecondClosure = {
    $0 * $1 
//再简写:被捕获的参数列表中,含有a、b,下标从0开始,可通过"$"获取。省略参数列表 (a, b)和 关键字 in
}

闭包应用

  • 排序
var arr:[Int] = [1,3,5,6,7,2,4,6,8]

arr.sorted() //[1, 2, 3, 4, 5, 6, 6, 7, 8]

arr.sorted {
    $0 > $1  //[8, 7, 6, 6, 5, 4, 3, 2, 1]
}
var arr = [0,1,2,3,4,5,6,7,8,9,10]
arr.sorted {
    return fabs(Float($0-5)) < fabs(Float($1-5))  //离5越近排在越前面 [5, 4, 6, 3, 7, 2, 8, 1, 9, 0, 10]
}
  • 遍历
//forEach
var arr2 = [5,6,7,8,9]

arr2.forEach {
    print("\($0)")  //[5, 6, 7, 8, 9]
}

var arr3 = [1,2,3,4]
//filter
arr3.filter {
    return $0 > 3   //[4]
}

var arr4 = ["0","1","imagine"]
//map
var num = arr4.map {
    Int($0) //[0, 1, nil] 类型转换可能失败,所以返回的是可选型
}
var num2 = arr4.compactMap {
    Int($0) //[0, 1] //compactMap : 解包->展开并合并
}
//reduce
var arr5 = [0,1,2]

var sum = arr5.reduce(0) {
    return $0 + $1  //3
}

闭包作为函数参数

func handler(_ a: Int, _ b: Int,operation:(Int,Int)->Int) ->Int {
    let res = operation(a,b)
    return res
}

let multipyClosure = { //实现一个闭包
    (a:Int,b:Int) in
    a * b
}

handler(2, 3, operation: multipyClosure) //将闭包作为参数传递

捕获

闭包可以从上下文环境中捕获常量、变量,并在自己的作用域内使用。

//捕获
var num = 3
arr.sorted {
    return fabs(Float($0-num)) < fabs(Float($1-num))  //向外层找变量 num
}
掌握Swift闭包表达式语法 Swift是苹果公司在2014年WWDC上发布的一款全新的编程语言,旨在替代Objective-C,成为iOS和macOS应用程序开发的首选语言。Swift的设计兼顾了性能、安全和表达能力,提供了许多现代化语言特性,例如闭包、元组、泛型、协议扩展等。Swift支持编译为高度优化的机器码,也支持即时编译(JIT)环境,从而在保持高性能的同时,还能提供更快的开发迭代速度。闭包是Swift编程语言中一种强大的特性,它允许开发者创建可以捕获并存储其所在上下文中变量和常量引用的代码块。 阅读详情

相关推荐

自动驾驶轨迹规划算法——Apollo EM Planner

Apollo EM Planner 是百度自动驾驶系统中的轨迹规划算法,采用期望-最大化(EM)迭代优化思想。其核心是将轨迹规划分解为路径优化(E-Step)和速度优化(M-Step)两个子问题,在Frenet坐标系下交替求解。算法先通过动态规划(DP)搜索粗路径,再使用二次规划(QP)进行平滑优化,并结合障碍物信息生成安全走廊。相较Lattice、Hybrid A*等规划器,EM Planner具有更好的实时性、动态障碍物处理能力和轨迹平滑性,适用于城市道路、高速公路等复杂场景。该算法通过解耦路径与速度优

swaggytiger的博客 2664

Swift-闭包

https://www.jianshu.com/p/d939c3443686

qq_27909209的博客 362

SAP-ABAP:SAP客户端管理核心事务码SCC4深度解析

SAP客户端管理核心事务码SCC4深度解析

baidu_35680696的博客 1565

简单聊聊Swift闭包的用法

1.闭包 闭包是一个捕获了外部变量或者常量的函数,可以有名字的函数,可以是匿名的函数,也可以是不捕获外部变量的函数。所以可以说闭包是特殊的函数。 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 ObjC 中的代码块(blocks)比较相似。 捕获的变量,可以写在捕获列表里. 如果使用捕获列表,即使省略了参数名字、参数类型、返回类型,也必须要用 in 的关键字 ●捕获列表里面的是捕获的是值,不可变, ●未在捕获列表里,捕获到的是地址,可以修改

砥砺前行的博客 1535

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2492

BMS菊花链芯片怎么选?一张表对比ADI、TI、NXP五大厂家的隔离通信方案

本文深入对比了ADI、TI、NXP等五大厂商的BMS菊花链芯片隔离通信方案,涵盖技术演进、核心参数和场景化选型策略。通过实测数据和开发经验分享,帮助工程师在新能源汽车和储能系统中选择最优方案,提升通信可靠性和成本效益。

weixin_33724046的博客 432

iOS开发之Swift篇(7)—— 闭包

目录版本闭包的定义及使用闭包作为函数参数尾随闭包逃逸闭包 版本 Xcode 11.0 Swift 5.1 闭包的定义及使用 1. 概念 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数(Lambdas)比较相似。 其实全局函数和嵌套函数实际上也是特殊的闭包,区别如下: 全局函数是...

看影成痴 466

Unity 工具 之 Natcorder 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端)

Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 目录 Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 一、简单介绍 二、插件导入使用 三、几个 Demo 演示效果 四、关键代码 五、下载地址 一、简单介绍 Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。 本节介绍,使用Unity插件,进行屏幕录制,生成图片,gif 动图,以及mp4文件等;能录制场景,也能录制摄像头,多功能录

仙魁XAN 7557

Swift 各种闭包各种使用 && 设置参数,函数传值

Swift 各种闭包各种使用 && 设置参数,函数传值

weixin_35755389的博客 7692

从零开始:在Ubuntu 22.04上配置Isaac Gym Preview 3环境(含常见错误解决方案)

本文提供了在Ubuntu 22.04系统上从零开始配置Isaac Gym Preview 3环境的完整实战指南。内容涵盖NVIDIA驱动安装、Conda环境搭建、CUDA与PyTorch版本精准匹配、Isaac Gym核心安装与验证,并重点介绍了针对四足机器人等复杂系统的强化学习训练环境配置、常见错误解决方案及性能调优技巧,旨在帮助开发者高效部署这一高性能物理仿真平台。

weixin_29048775的博客 391

AI安全攻防:十六进制编码与表情符号如何绕过ChatGPT安全限制

在人工智能安全领域,提示词工程是影响大语言模型行为的关键技术。其核心原理在于通过精心设计的输入文本,引导模型生成特定内容或执行特定任务。这项技术的价值在于能够深入探究模型的理解机制与决策边界,对于模型优化、安全测试及功能开发具有重要意义。在实际应用场景中,研究人员常利用编码转换、符号插入等方法构造输入,以测试模型安全护栏的鲁棒性。近期,一种结合十六进制编码与表情符号的组合攻击手法受到关注,该方法通过信息伪装与语义干扰,试图绕过模型内置的内容过滤机制,这凸显了当前AI安全在输入预处理与语义理解协同防御上面临的

weixin_30633405的博客 446

【Groovy】循环控制 ( Number 注入函数实现循环 | times 函数 | upto 函数 | downto 函数 | step 函数 | 闭包作为最后参数可写在外面 )

前言、 一、times 循环函数、 二、upto 循环函数、 三、downto 循环函数、 四、step 循环函数、 1、step 循环函数递增操作、 2、step 循环函数递减操作、 五、闭包作为参数的使用规则、 1、闭包作为最后一个参数可以写到括号外面、 2、函数参数括号可以省略、参数使用逗号隔开、 六、完整代码示例、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2251

宇树G1语音助手完整开发指南(上)——从零构建智能知识库对话系统

本文将详细介绍如何为宇树G1人形机器人开发一个,实现"唤醒 → 对话 → 查询 → 回复"的智能助手功能。

m0_47999117的博客 780

Swift 闭包

必报是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)一级其他一些编程语言中的匿名函数(Lambdas)比较相似。闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。Swift 会为你管理在捕获过程中涉及到的所有内存操作。在Swift 的闭包表达式拥有简洁的风格,并鼓励在常见场景中进行语法优化,主要优化如下return。

xiaoxiaobukuang的专栏 2089

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Swift闭包的实现与捕获机制解析(8)

Swift闭包在底层被表示为一个结构体,其基本定义如下:

Android开发领域创作者 834

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Swift 尾随闭包与捕获列表(15)

Swift 作为一种现代化的编程语言,提供了丰富的函数式编程特性,其中尾随闭包和捕获列表是两个重要的概念。尾随闭包允许开发者以更简洁的语法编写闭包,而捕获列表则提供了对闭包捕获变量方式的精确控制。这两个特性在 Swift 代码中广泛使用,理解它们的原理和应用对于编写高效、安全的 Swift 代码至关重要。

Android开发领域创作者 758

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Swift闭包

Swift闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。 Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 匿名函数比较相似。 全局函数和嵌套函数其实就是特殊的闭包。 根据官方文档,闭包通常下三种形式之一: 全局函数:有名字但不能捕获任何值。 嵌套函数:有名字,也能捕获封闭函数内的值。 闭包...

m0_46311757的博客 252

Swift 闭包(block)详解

1、闭包 Swift对闭包进行了简化: 利用上下文推断参数和返回值类型 隐式返回单表达式闭包,即单表达式闭包可以省略return关键字 参数名称缩写 尾随(Trailing)闭包语法 先来看一个排序的例子,数组的降序排列 let usernames = ["Wangwu", "Lisi", "Xiaoming", "Zhangsan"] func backWards(s1: Stri...

qq_32117417的博客 8388

Swift闭包(Closure)深入解析与底层原理

闭包是自包含的函数代码块,可以在代码中被传递和使用。它不仅可以像函数一样执行代码,还能捕获和存储定义时上下文中的常量和变量。Swift中的闭包类似于其他语言中的lambda或匿名函数。// 基础闭包语法闭包本质:闭包是一个包含执行代码和上下文环境的特殊函数类型。内存结构:闭包由函数指针、上下文对象和元数据信息三部分组成。捕获机制:支持值捕获和引用捕获,可通过strong、weak、unowned控制引用方式。内存管理:非逃逸闭包在栈上分配,逃逸闭包在堆上分配。

画个大饼的博客 1497

Swift基础语法: 23 - Swift的Trailing闭包, 捕获, 闭包是引用类型

Swift的Trailing闭包, 捕获, 闭包是引用类型

Cain For iOS的专栏 691

Swift闭包概述(14)

Swift闭包是一种自包含的代码块,可以在代码中被传递和使用。它们是Swift语言中实现函数式编程的核心组件,同时也是处理异步操作、回调机制和数据转换的重要工具。闭包在语法上简洁灵活,在底层实现上却有着复杂而精巧的设计。 本文将从源码级别深入分析Swift闭包的概念、基础语法、内存管理和实现原理。通过对这些内容的详细解析,开发者可以更深入地理解闭包的工作机制,从而更加高效、安全地使用闭包进行编程。

Android开发领域创作者 1039

Swift之闭包

Swift之闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。 Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 匿名函数比较相似。 全局函数和嵌套函数其实就是特殊的闭包。 根据官方文档,闭包通常下三种形式之一: 全局函数 一个有名字但不会捕获任何值的闭包 嵌套函数 一个有名字并可...

weixin_46096387的博客 329

swift闭包

一.基础概念 闭包表达式:可以用func定义一个函数,也可以用闭包表达式来定义一个函数。闭包表达式不需要写外部名称,在外部使用时直接传入参数。 //闭包表达式 { (参数列表) -> 返回值类型 in 函数体代码 } 尾随闭包:将闭包表达式作为参数的最后一个实参,用尾随闭包来增加函数可读性。将闭包写在小括号外: test(a:Int,b:Int){$0 + $1} 。如果闭包是唯一参数,则可以写作 test{$0 + $1},意义是调用test,并且传入这个闭包。 忽略参数:不使用参数

CQUPT—ZHX 316

Swift学习笔记之闭包

Swift学习笔记 根据《Swift编程权威指南》和 Swift官方文档 学习整理的Swift学习笔记,持续更新,中间有什么错误,欢迎大家留言讨论。 总体目录 一、类型、常量和变量 二、流程控制 三、容器(集合) 四、函数 五、闭包 六、枚举 … 官方文档 swift官方文档 文章目录Swift学习笔记总体目录官方文档五、闭包1、闭包表达式2、闭包表达式的简写2.1 利用类型推断2.2 隐式返回单表达式闭包2.3 利用参数的快捷语法2.4 直接使用操作符3、尾随闭包4、忽略参数5、闭包与捕获6、闭包是引用类

weixin_41743200的博客 634
上一篇: 【网页特性】geolocation | video | Web Workers | 拖拽 | FileReader | canvas操作 | 弧度与角度转换
下一篇: 【Swift4】(7) 枚举 | 应用
蟹蟹蟹风流
蟹蟹蟹风流 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 前端开发技术领域 领域专家: 前端开发技术领域
博客等级 码龄11年 3万+粉丝 396原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值