博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift学习(三):闭包(Closures)
阅读量:5301 次
发布时间:2019-06-14

本文共 2081 字,大约阅读时间需要 6 分钟。

定义

闭包(Closures)是独立的函数代码块,能在代码中传递及使用。

 

语法

{(parameters) -> return type in  statements} 注:闭包表达式语法可以使用常量参数、变量参数和 inout 类型作为参数,但皆不可提供默认值。

 

范例

func funA(var value : String,closure: (str : String) -> ()) {    closure(str:value)}func closureA(var str : String){    println("closureA : Hi , " + str)}func closureB(var str : String){    println("closureB : Hi , " + str)}funA("cosmokey",closureA)    //closureA : Hi , cosmokeyfunA("cosmokey",closureB)    //closureB : Hi , cosmokeyfunA("cosmokey",{(var str : String) in println("closureC : Hi , " + str)})    //closureC : Hi , cosmokey

 

语法糖

根据上下文推断类型funA("cosmokey",{str in println("closureD : Hi , " + str)})    //closureD : Hi , cosmokey参数名简写funA("cosmokey",{println("closureE : Hi , " + $0)})    //closureE : Hi , cosmokey运算符函数sort(names, >)  //sort(names, { (s1: String, s2: String) -> Bool in return s1 > s2 } )

 

Trailing 闭包

注:Trailing 闭包是一个书写在函数括号之外(之后)的闭包表达式,函数支持将其作为最后一个参数调用。funA("cosmokey"){    str in println("closureF : Hi , " + str)     //closureF : Hi , cosmokey}

 

系统常见闭包:map、filter和reduce

map    map 可以把一个数组按照一定的规则转换成另一个数组    定义        func map(transform: (T) -> U) -> U[]    范例        var oldArray = ["Ping","Cosmokey"]        var newArray = oldArray.map(){
"Hi , " + $0} //["Hi , Ping","Hi , Cosmokey"]
filter    filter 起到的就是筛选的功能,参数是一个用来判断是否筛除的筛选闭包    定义            func filter(includeElement: (T) -> Bool) -> [T]        范例        var oldArray = ["Ping","Cosmokey","MM"]        var newArray = oldArray.filter(){count($0) > 2}  //["Ping", "Cosmokey"]
reduce    reduce 函数解决了把数组中的值整合到某个独立对象的问题。    定义        func reduce(initial: U, combine: (U, T) -> U) -> U    范例        var oldArray = ["C","o","s","m","o","k","e","y"]        var newArray = oldArray.reduce("Hi , "){            var newValue = $0 + $1            println(newValue)            return newValue        }        /*        Hi , C        Hi , Co        Hi , Cos        Hi , Cosm        Hi , Cosmo        Hi , Cosmok        Hi , Cosmoke        Hi , Cosmokey        */        println(newArray)        //Hi , Cosmokey

 

转载于:https://www.cnblogs.com/comsokey/p/Swift.html

你可能感兴趣的文章
和小哥哥一起刷洛谷(1)
查看>>
jquery对id中含有特殊字符的转义处理
查看>>
遇麻烦,Win7+Ubuntu12.10+Archlinux12.10 +grub
查看>>
SqlBulkCopy大批量导入数据
查看>>
pandas 修改指定列中所有内容
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
程序集的混淆及签名
查看>>