本篇文章给大家谈谈Swift 函数式编程:高效闭包使用指南,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
声明
闭包表达式参数可以是in-out参数,但不能设置默认值。还可以使用命名可变参数(但是如果可变参数没有放在参数列表的最后一个位置,编译器在调用闭包时会报错。)
例如var name=["Jack", "Bob", "Tom", "Alen", "James",]
varsortedArray=names.sorted(by:{(s1:字符串,s2:字符串)-Bool in
返回s1 s2
}) 闭包的函数体部分由关键字in引入。该关键字表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始。
简化之旅
根据上下文推断类型
因为排序闭包函数作为参数传递给sorted(by:)方法,所以Swift可以推断其参数和返回值的类型。 Sorted(by:) 方法是使用字符串数组调用的,因此其参数必须是(String, String) -Bool 函数。这意味着(String, String) 和Bool 类型不需要成为闭包表达式定义的一部分。因为所有类型都可以正确推断,所以返回箭头(-) 和参数周围的括号也可以省略:
reversedNames=name.sorted(by: { s1, s2 返回s1 s2 } )
单表达式闭包的隐式返回
单行表达式闭包可以通过省略return 关键字来隐式返回单行表达式的结果。上述版本的示例可以重写为:
eredNames=名称.sorted(by: { s1, s2 in s1 s2 } )
Sorted(by:) 方法的参数类型指定闭包必须返回Bool 值。因为闭包函数体只包含一个表达式(s1 s2),它返回一个Bool 类型值,所以这里没有歧义,可以省略return 关键字。
参数名称缩写
Swift 自动为内联闭包提供参数名称缩写功能。可以直接通过$0、$1、$2等依次调用闭包的参数。
如果在闭包表达式中使用参数名称缩写,则可以从闭包定义中省略参数列表,并且将从函数类型推断出与参数名称缩写对应的类型。 in关键字也可以省略,因为此时闭包表达式完全由闭包函数体组成:
reversedNames=名称.sorted(by: { $0 $1 } )
这里的$0和$1代表闭包中的第一个和第二个String类型参数。
操作符方法
实际上有一种更短的方法来编写上面示例中的闭包表达式。 Swift 的String 类型定义了大于号()的字符串实现,它作为函数接受两个String 类型参数并返回Bool 类型值。而这恰逢
Sorted(by:)方法的参数需要与函数类型匹配。因此,你可以简单地传递一个大于号,Swift 可以自动推断出你想要使用大于号的字符串函数实现:
反向名称=名称.排序(by:)
【Swift 函数式编程:高效闭包使用指南】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于开始学习 Swift 的闭包了,听说这东西超级有用!
有12位网友表示赞同!
闭包能帮我简化代码?我特别喜欢简洁高效的写法。
有8位网友表示赞同!
之前用过其他语言的匿名函数,好像 Swift 闭包和它类似吧?
有11位网友表示赞同!
感觉闭包在处理回调的地方很有用,可以很灵活地传递数据。
有15位网友表示赞同!
想问问闭包有哪些常见的应用场景?我需要更深入地了解它。
有14位网友表示赞同!
学习闭包之前,应该先把基本的 Swift 语法掌握透吗?
有15位网友表示赞同!
闭包是不是类似于 JavaScript 的箭头函数?有什么区别?
有19位网友表示赞同!
有推荐的 Swift 学习资源吗?希望能找到一些不错的教程介绍闭包。
有11位网友表示赞同!
我以前写代码的时候总是会把回调函数搞混,学习闭包能解决这个问题?
有13位网友表示赞同!
感觉闭包是一种非常强大的编程工具,值得花时间好好学习。
有18位网友表示赞同!
现在很多 iOS 开发都离不开闭包吧?
有10位网友表示赞同!
想知道闭包在实际项目中是如何使用的,希望能看到一些代码案例。
有12位网友表示赞同!
Swift 闭包真的能提高代码的可读性和可维护性吗?
有12位网友表示赞同!
学习完了闭包以后,是不是会发现很多其他的编码技巧呢?
有14位网友表示赞同!
闭包可以用来实现哪些高级的功能?比如并发编程之类?
有13位网友表示赞同!
Swift 里的闭包有几种不同的语法形式吗?
有11位网友表示赞同!
我想知道 Swift 的闭包是如何被调用的?它的执行机制是什么?
有14位网友表示赞同!
闭包的参数类型和返回值类型怎么确定呢?
有15位网友表示赞同!
学习闭包之后,可以写出更优雅、更符合设计模式的代码吗?
有19位网友表示赞同!
闭包是不是会造成内存泄漏的问题?如何避免这样的问题?
有15位网友表示赞同!