Swift学习(三):闭包(Closures)

本文深入讲解了Swift语言中的闭包概念及其应用。介绍了闭包的基本定义、语法特性、以及如何在实际编程中灵活运用,包括作为参数传递、使用语法糖简化书写等技巧,并通过map、filter、reduce等内置函数展示了闭包的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

闭包(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 , cosmokey
funA("cosmokey",closureB)    //closureB : Hi , cosmokey
funA("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<U>(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<U>(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值