• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

定义

闭包(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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift关闭键盘的两种方法发布时间:2022-07-13
下一篇:
43个优秀的Swift开源项目发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap