【Swift初见】Swift闭包

【Swift初见】Swift闭包,第1张

概述闭包是功能性自包含模块,可以在代码中被传递和使用。与objective-c中的block比较类似。 闭包有三种形式: 1、全局函数 2、嵌套函数 3、闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的没有名字的闭包 闭包表达式是一种利用简洁语法构建内联闭包的方式。 闭包表达式提供了一些语法优化, 使得撰写闭包变得简单明了。 闭包的一般形式: { (parameters) -> r 闭包是功能性自包含模块,可以在代码中被传递和使用。与objective-c中的block比较类似。


闭包有三种形式:

1、全局函数
2、嵌套函数
3、闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的没有名字的闭包

闭包表达式是一种利用简洁语法构建内联闭包的方式。 闭包表达式提供了一些语法优化,使得撰写闭包变得简单明了。

闭包的一般形式:
{ (parameters) -> return type instatements}


以swift提供的sort函数为例:

对一个数组进行排序:

普通函数的做法是:
let names = ["Chris","Alex","Ewa","barry","DanIElla"]func backwards(s1 : String,s2 : String) -> Bool {    return s1 > s2}var reserve = sorted(names,backwards)println(reserve)


得到的输出为:
[Ewa,DanIElla,Chris,barry,Alex]


使用闭包表达式的代码为:
var reserved = sorted(names,{(s1 : String,s2 : String) -> Bool in    return s1 > s2})println(reserved)


得到的输出为:

[Ewa,Alex]


相当于把backwards函数作为一个参数传给了sorted函数,函数和返回值类型都应该写在大括号内。闭包的函数体部分由in关键字引入,in后面就是代表该闭包的函数体部分。

swift函数有类型推断的功能,排序闭包又是作为函数的参数传入的,那么swift可以推断出它的参数和返回值类型,那么sorted函数可以改写为:
var reserved1 = sorted(names,{s1,s2 in return s1 > s2})println(reserved1)


我们可以看出得出的结果还是一样的。

单行表达式闭包可以通过隐藏return关键字来隐式返回表达式的结果。那么上面的代码可以改写为:
var reserved2 = sorted(names,s2 : String) -> Bool in  s1 > s2 })println(reserved2)



参数名简写:
swift自动为内联函数提供了参数名简写功能,可以直接通过$0 $1 $2等名字来引用的闭包的参数的值。
用字符串排序的时候,系统对”>”符号总报有歧义这个错误,用int数据来排序就没问题了。
let intNumbers = [2,3,4,5]var reserved3 = sorted(intNumbers,{ 
[5,2]
> })println(reserved3)


得到的结果是:

希望大家共同学习。 总结

以上是内存溢出为你收集整理的【Swift初见】Swift闭包全部内容,希望文章能够帮你解决【Swift初见】Swift闭包所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存