Swift入门篇-闭包和函数

2023-11-13

 今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数

 

1:函数类型

函数类型
 var  变量 :(类型)->返回值 =函数名

说明:
1:函数名 表示函数地址
2:(类型)->返回值 表示函数类型
3:函数类型必须和函数名的参数和返回值一致

例子

/*

1:func 是函数关键字
2:Say是函数名,表示函数的地址
3:Say函数 参数是整形 返回值为布尔类型
*/

 func Say(num:Int)->Bool{ 

return num > 10
 }
 var By:(Int)->Bool = Say 

/* 
1:Say是函数名的地址,并且函数类型,参数为整形,返回值布尔类型
2:(Int)->Bool 表示 函数类型,参数为整形 ,返回值为布尔类型。 
即:By是函数变量(参数为整形,返回值为布尔类型) 指向函数名(Say) 
*/ 

var b = By(12) //by(12)直接调用函数
println(b) 

运行结果
 true

2:闭包格式


 格式 :
  {  
    (参数:类型) ->返回类型  in  
 
     执行方法
   
     return 返回类型
   }

 说明:
 1;闭包主要指向函数类型
 2:闭包的参数必须和函数类型的参数和返回值一致

例子

/*

函数Getlist说明
参数:
  1:第一个参数 整形集合变量
  2:第二参数,函数类型变量 参数为整形返回值布尔类型
返回值
  整形集合

*/


func GetList(arr:Int[] , pre:(Int)->Bool) ->Int[]{
    
   //定义一个空的可变整形集合
    var tempArr = Int[]()

    for temp in arr {

        if pre(temp){
            tempArr += temp;
        }
    }

    return tempArr;
}


/*
调用Getlist 说明
第一个参数 整形数组 [1,2,3,4]
第二个参数  闭包 来指向给 函数类型 。
{(s) in return s>2} 闭包类型说明,参数为整形,返回值为布尔类型
*/
let arr=GetList([1,2,3,4],{(s:Int) in return s>2})
println(arr)

运行结果
[3, 4]

 3:闭包简写方法

  1;第一种简写 :省略 参数类型和括号

  2:第二种简写 : 省略 参数类型和括号,return关键字

  3:第三种简写 : 参数名称缩写 (用$0代表第一个参数,$1代表第二个参数)

/*

函数Getlist说明
参数:
  1:第一个参数 整形集合变量
  2:第二参数,函数类型变量 参数为整形返回值布尔类型
返回值
  整形集合

*/


func GetList(arr:Int[] , pre:(Int)->Bool) ->Int[]{
    
   //定义一个空的可变整形集合
    var tempArr = Int[]()

    for temp in arr {

        if pre(temp){
            tempArr += temp;
        }
    }

    return tempArr;
}


//第一种简写 :省略 参数类型和括号
var Arr = GetList([1,2,3,4],{s in return s>2})

//第二种简写 : 省略 参数类型和括号,return关键字
Arr = GetList([1,2,3,4], {s in s>2})

 //第三种简写 : 参数名称缩写

 Arr = GetList([1,2,3,4],{$0>2}) //其中$0表示第一个参数


println(Arr)

以上3种用法的运行结果为

[3, 4]

 4:尾随闭包

官方定义:尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用

/*

1: 函数 Fuction 的参数 函数类型
2: 参数为函数类型,函数类型,参数为空,返回值为空

*/

func Fuction(closure: () -> ()) {
    println("无参数,无返回值的韩式类型")
}



//-----------------第一种调用方法------------
/*
调用函数Fuction
1:参数为闭包
2:闭包的参数为空,返回值为空

*/
Fuction({

})

//-----------------第二种调用方法------------

Fuction() {
 
}

以上2种调用方法的运行结果都是

无参数,无返回值的韩式类型

 后面的文章,我回陆续把我学习到swift语言的知识写出来形成一个系列。由于是新语言,难免有不足,欢迎给我提出意见。也可以加我QQ 1436051108一起讨论,如果您有什么问题,也可以直接在QQ留言发给我,我看到之后第一时间回复您

  最后总结一下。送上一直思维导图,作为文章的结束




from: http://www.cnblogs.com/gcb999/p/3797072.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift入门篇-闭包和函数 的相关文章

随机推荐

  • 强化学习应用简述---强化学习方向优秀科学家李玉喜博士创作

    强化学习 reinforcement learning 经过了几十年的研发 在一直稳定发展 最近取得了很多傲人的成果 后面会有越来越好的进展 强化学习广泛应用于科学 工程 艺术等领域 下面简单列举一些强化学习的成功案例 然后对强化学习做简介
  • ATT&CK实战系列-红队评估 (红日靶场3)Vulnstack三层网络域渗透靶场

    文章目录 环境配置 靶场介绍 靶场设置 外网渗透 信息收集 端口扫描 目录扫描 漏洞发现与利用 获取ssh账号密码 登录centos 提权 内网渗透 建立代理 内网信息收集 smb暴破 获取本地管理员密码 横向移动 使用psexec模块上线
  • OAK相机:启动报错X_LINK_DEVICE_NOT_FOUND

    OAK相机 启动报错X LINK DEVICE NOT FOUND 环境 报错 原因与解决 未设置 udev 规则 USB崩溃 排线接触不良或相机模块时钟干扰 环境 硬件 4 OV9782相机模组 OAK FFC 4P驱动模组 笔记本电脑
  • webpack之加载json数据格式

    webpack之加载json数据格式 webpack中可以加载的有用资源还有数据 如 json 文件 csv tsv xml 如果需要导入这些格式的数据 第一种方法是 我们需要两个 loader 去加载这些格式的数据 第二种方法是 我们可以
  • dronekit-sitl+MAVproxy+MissionPlanner进行无人机仿真

    以下教程为通过dronekit sitl MAVproxy和MissionPlanner进行无人机仿真 其中dronekit sitl用于模拟无人机 MAVproxy用于将无人机的数据转发到其他端口 MissionPlanner用于无人机的
  • css 背景图旋转 只让背景图片旋转180度的实现示例

    最近进行二次开发的时候有个图片用背景图要旋转一定角度 下图中如果只给 question添加背景通过CSS3的transfrom rotate肯定是会影响文字的展示 所以把背景图放到伪类中进行旋转就可以完美解决这个问题了 话不多说 上代码 d
  • Shell命令行下如何查找并替换多个文件中的字符

    如果你在shell命令行下 需要一种能快速查找并替换多个文件里字符的方法 那么下面这行命令你一定要记住或者收藏起来 它能帮到你的 find name html print0 xargs 0 perl pi e s SEARCHSTRING
  • 大数据技术——连接数据库报错:Cased by:javax.net.ssl.SSLHandshakeException:No appropriate protocol (protocol is dis

    问题 连接数据库报错 Cased by javax net ssl SSLHandshakeException No appropriate protocol protocol is disabled or cipher suites ar
  • css浮动改变鼠标箭头样式

    默认箭头样式 cursor default 系统默认箭头样式 手型 cursor pointer 手型 手型 cursor hand 手型 移动十字箭头 cursor move 移动十字箭头 帮助问号 cursor help 系统自带帮助问
  • 在openwrt上安装和配置git、ssh和python3

    简单记录在openwrt上安装配置git ssh和python3的流程 更新包管理器 openwrt 自带的包管理器是opkg 安装之前先更新一下 opkg update git和ssh一般放在一起配置 ssh配置完成才可以正常使用git
  • STM32的学习记录--2.WiFi模块的使用

    本次学习用的单片机是STM32F103C8T6 本次学习用的WiFi模块是ESP8266 本博客仅用于课余学习 不可商用 如有侵权 请告知我删除博客 谢谢配合 以下学习资料均在云盘 仅供学习交流 禁止用于商业用途 本文链接 个人博客 htt
  • 计算机视觉—— 相机标定

    目录 简介 一 相机模型 1 坐标系 2 坐标系变化 3 相机畸变模型 二 相机标定原理 三 张正友黑白棋盘格标定 2 1 算法思想 2 2 求解内参和外参的积 2 3 求解内参矩阵 2 4 求解外参矩阵 2 5 得到相机畸变矫正参数 2
  • 一文搞定Windows11+WSL+Pycharm开发环境及避坑

    WSL Pycharm开发环境搭建以及常见问题处理 Windows11 零 环境及背景 0 1 为什么需要这样的开发环境 0 2 什么是WSL 0 3 搭建环境 壹 Windows11 搭建WSL 1 1 启动 WSL 1 2 启动虚拟机平
  • Kibana忘记初始密码怎么办?

    在你elasticsearch的安装目录bin目录下面执行 bin gt elasticsearch reset password u elastic 执行结束之后就是下面初始化新的密码 注意 首次登录Kibana的登录名 elastic
  • Oracle数据库中神奇的dual表

    DUAL是oracle中非常神奇的一张表 有好多人用了很久oracle都不知道dual是干什么的 因为不是自己设计的表 一般处理的SQL也用不到 这里简单说下DUAL的用法 知道之后很多情况下DUAL查询还是很方便的 一 DUAL简介 1
  • Matlab:读取和处理大数据表格文本文件

    Matlab 读取和处理大数据表格文本文件 在实际的数据分析应用中 往往需要处理海量数据 针对大型数据文件 Matlab提供了快速高效的读取和处理工具 可以便捷地完成数据处理任务 本文将介绍如何使用Matlab读取和处理大型表格文本文件 第
  • c#控制台Console类

    c 控制台Console类 console表示控制台 是一个类 它封装了控制台的一些基本操作 输出 Console Write 输出一个或多个值后不换行 其后没有新行符 可以接着前面的字符继续写入 Console WriteLine 输出一
  • 炸弹人小游戏代码开源(python)

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 当遵从一心 踏浪而往 纵千山万水 也要抵达 目录 一 什么是python 二 游戏代码
  • 学python心得体会800字-python心得体会

    广告关闭 腾讯云双11爆品提前享 精选热门产品助力上云 云服务器首年88元起 买的越多返的越多 最高满返5000元 前些日子用python基于prometheus开发了一个vsphere volume卷监控的exporter 于是跟vsph
  • Swift入门篇-闭包和函数

    今天主要是给大家分享的是 swift中闭包的用法 我个人觉得闭包就是函数的简写方法 如果您函数不是很熟悉请查阅 swift入门篇 函数 1 函数类型 函数类型 var 变量 类型 gt 返回值 函数名 说明 1 函数名 表示函数地址 2 类