• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > 深入理解Swift语言中的闭包机制

深入理解Swift语言中的闭包机制

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了swift 闭包,js闭包机制,c语言传递闭包,javascript闭包函数,闭包等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在 Swift 中的闭包类似于结构块,并可以在任何地方调用,它就像 C 和 Objective C 语言内置的函数。 函数内部定义的常数和变量引用可被捕获并存储在闭包。函数被视为封闭的特殊情况,它有 3 种形式。

2015113163239975.png (562×76)

在 Swift 语言闭合表达式,如下优化,重量轻语法风格,其中包括:

  • 推导参数并从上下文菜单返回值的类型
  • 从单封表达的隐性返回
  • 简略参数名称
  • 尾部闭包语法

语法
下面是一个通用的语法定义用于闭包,它接受参数并返回数据的类型:
{(parameters) -> return type in
   statements
}
</div> 
下面是一个简单的例子:
let studname = { println("Welcome to Swift Closures") }
studname()
</div> 
当我们使用 playground 运行上面的程序,我们得到以下结果

Welcome to Swift Closures
</div>

以下闭包接受两个参数并返回一个布尔值:
{(Int, Int) -> Bool in
   Statement1
   Statement 2
    ---
   Statement n
}
</div> 
下面是一个简单的例子:
let divide = {(val1: Int, val2: Int) -> Int in
   return val1 / val2
}
let result = divide(200, 20)
println (result)
</div> 
当我们使用 playground 运行上面的程序,我们得到以下结果

10
</div>

在闭包中的表达式
以便捷的方式命名来定义代码块可以通过嵌套函数实现的。取而代之代表整个函数声明及名称构造用来表示函数。代表函数的语法清晰,简短声明是通过封闭的表达来实现的。

升序排列程序
排序字符串是 Swift 中保留的函数 “sorted”,这是在标准库中已提供实现。该函数将所述给定的字符串进行递增顺序排序并返回具有相同的尺寸,并在旧数组中相同数据类型的一个新的数组的元素。旧的数组保持不变。

两个参数的排序在函数内部表示:

已知类型的值表示为数组

数组的内容 (Int,Int) ,并返回一个布尔值(Bool),如果数组排序不好就会返回true,否则将返回false。

普通函数带输入字符串被写入,并传递给排序函数获得字符到新的数组,如下面所示:
func ascend(s1: String, s2: String) -> Bool {
   return s1 > s2
}
let stringcmp = ascend("swift", "great")
println (stringcmp)
</div> 
当我们使用 playground 运行上面的程序,我们得到以下结果

true

</div>

最初的数组排序给定为 "Swift" 和 "great"。函数用来数组排序被声明为字符串数据类型,并且返回类型为布尔型。 两个字符串进行比较,并以升序排序,并存储在新的数组。如果排序执行成功,该函数将返回true;否则将返回 false。</div>

闭包表达式语法用法

常量参数:

可变参数 和 inout 参数

闭包表达不支持的默认值。可变参数和参数元组也可以用来作为参数类型和返回类型。
let sum = {(no1: Int, no2: Int) -> Int in
   return no1 + no2
}
let digits = sum(10, 20)
println(digits)
</div> 
当我们使用 playground 运行上面的程序,我们得到以下结果

30
</div>

在函数声明中提到的参数和返回类型声明,也可通过使用 'in' 关键字内联闭包表达式函数表示。 一旦声明参数及其返回类型“in”关键字,则用于表示闭包体。

单一表达式隐式返回
在这里,排序函数的第二个参数的函数类型明确指出,一个布尔值必须由闭包返回。因为闭包体内含有一个表达式(s1 > s2)返回一个布尔值, 不会出现歧义,其返回关键字可以省略。

要返回一个表达式语句在闭包中, “return” 关键字在其声明部分被省略。
let count = [5, 10, -6, 75, 20]
var descending = sorted(count, { n1, n2 in n1 > n2 })
var ascending = sorted(count, { n1, n2 in n1 < n2 })

println(descending)
println(ascending)
</div> 
当我们使用 playground 运行上面的程序,我们得到以下结果

[75, 20, 10, 5, -6]
[-6, 5, 10, 20, 75]
</div>

该语句本身明确规定,当 string1 大于 string2 返回 true,否则为false,因此return语句省略。

已知类型的闭包
考虑两个数相加。我们知道相加后将返回整数数据类型。因此,已知类型的闭包声明
let sub = {(no1: Int, no2: Int) -> Int in
   return no1 - no2
}
let digits = sub(10, 20)
println(digits)
</div> 
当我们使用 playground 运行上面的程序,我们得到以下结果

-10
</div>

声明简写参数名称作为闭包
Swift 自动提供简写参数名内联闭包, 可以使用由 $0,$1,$2 等等名称,指的是封闭的参数值。
var shorthand: (String, String) -> String
shorthand = { $1 }
println(shorthand("100", "200"))
</div> 
在这里,$0 和 $1 参考闭包的第一和第二个字符串参数。

当我们使用 playground 运行上面的程序,我们得到以下结果

200
</div>

Swift 方便用户来表示内嵌闭包为缩写参数名为:$0, $1, $2 --- $n.

闭包参数列表中被省略定义部分,当我们表示内部闭包表达式简写参数名。 根据函数类型简写参数名称将被导出。由于简写参数表达体所定义的 'in' 关键字被省略。

闭包作为操作函数
Swift 提供了一种简单的方法访问的成员,只需提供操作符函数作为闭包。 在前面

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift中闭包实战案例详解
  • Swift 中闭包的简单使用
  • 详解Swift中的函数及函数闭包使用
  • 深入理解Swift语言中的闭包机制
  • Swift教程之闭包详解

相关文章

  • 2017-05-28Swift中用到extension的一些基本的扩展功能讲解
  • 2017-05-28Swift语言中的一些访问控制设置详解
  • 2017-05-28微信开发--自定义菜单查询返码乱码的解决方法
  • 2017-05-28超全面的Swift编码规范(推荐)
  • 2017-05-28MyBatis关于二级缓存问题
  • 2017-05-28Swift语言中的函数学习教程
  • 2017-05-28iOS UITableView展开缩放动画实例代码
  • 2017-05-28swift中c风格的for循环执行效率
  • 2017-05-28eclipse构建和发布maven项目的教程
  • 2017-05-28Swift实现Selection Sort选择排序算法的实例讲解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Swift 教程
    • Swift学习笔记之构造器重载
    • struts2实现多文件上传的示例代码
    • Swift使用Cocoa中的数据类型教程
    • MyBatis 参数类型为String时常见问题及解决方法
    • eclipse中maven插件安装教程
    • Swift 协议
    • iOS开发中Swift 指纹验证功能模块实例代码
    • Swift中通过叠加UILabel实现混合进度条的方法
    • Swift教程之闭包详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有