- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入理解Swift语言中的闭包机制
深入理解Swift语言中的闭包机制
在 Swift 中的闭包类似于结构块,并可以在任何地方调用,它就像 C 和 Objective C 语言内置的函数。 函数内部定义的常数和变量引用可被捕获并存储在闭包。函数被视为封闭的特殊情况,它有 3 种形式。
在 Swift 语言闭合表达式,如下优化,重量轻语法风格,其中包括:
1.推导参数并从上下文菜单返回值的类型
2.从单封表达的隐性返回
3.简略参数名称
4.尾部闭包语法
语法
下面是一个通用的语法定义用于闭包,它接受参数并返回数据的类型:
复制代码 代码如下:
{(parameters) - return type in
statements
}
下面是一个简单的例子:
复制代码 代码如下:
let studname = { println(Welcome to Swift Closures) }
studname()
当我们使用 playground 运行上面的程序,我们得到以下结果
Welcome to Swift Closures
以下闭包接受两个参数并返回一个布尔值:
复制代码 代码如下:
{(Int, Int) - Bool in
Statement1
Statement 2
---
Statement n
}
下面是一个简单的例子:
复制代码 代码如下:
let divide = {(val1: Int, val2: Int) - Int in
return val1 / val2
}
let result = divide(200, 20)
println (result)
当我们使用 playground 运行上面的程序,我们得到以下结果
在闭包中的表达式
以便捷的方式命名来定义代码块可以通过嵌套函数实现的。取而代之代表整个函数声明及名称构造用来表示函数。代表函数的语法清晰,简短声明是通过封闭的表达来实现的。
升序排列程序
排序字符串是 Swift 中保留的函数 “sorted”,这是在标准库中已提供实现。该函数将所述给定的字符串进行递增顺序排序并返回具有相同的尺寸,并在旧数组中相同数据类型的一个新的数组的元素。旧的数组保持不变。
两个参数的排序在函数内部表示:
已知类型的值表示为数组
数组的内容 (Int,Int) ,并返回一个布尔值(Bool),如果数组排序不好就会返回true,否则将返回false。
普通函数带输入字符串被写入,并传递给排序函数获得字符到新的数组,如下面所示:
复制代码 代码如下:
func ascend(s1: String, s2: String) - Bool {
return s1 s2
}
let stringcmp = ascend(swift, great)
println (stringcmp)
当我们使用 playground 运行上面的程序,我们得到以下结果
复制代码 代码如下:
true
最初的数组排序给定为 Swift 和 great。函数用来数组排序被声明为字符串数据类型,并且返回类型为布尔型。 两个字符串进行比较,并以升序排序,并存储在新的数组。如果排序执行成功,该函数将返回true;否则将返回 false。
闭包表达式语法用法
常量参数:
可变参数 和 inout 参数
闭包表达不支持的默认值。可变参数和参数元组也可以用来作为参数类型和返回类型。
复制代码 代码如下:
let sum = {(no1: Int, no2: Int) - Int in
return no1 + no2
}
let digits = sum(10, 20)
println(digits)
当我们使用 playground 运行上面的程序,我们得到以下结果
在函数声明中提到的参数和返回类型声明,也可通过使用 in 关键字内联闭包表达式函数表示。 一旦声明参数及其返回类型“in”关键字,则用于表示闭包体。
单一表达式隐式返回
在这里,排序函数的第二个参数的函数类型明确指出,一个布尔值必须由闭包返回。因为闭包体内含有一个表达式(s1 s2)返回一个布尔值, 不会出现歧义,其返回关键字可以省略。
要返回一个表达式语句在闭包中, “return” 关键字在其声明部分被省略。
复制代码 代码如下:
let count = [5, 10, -6, 75, 20]
var descending = sorted(count, { n1, n
原创力文档


文档评论(0)