加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

闭包-简洁版(Swift)

发布时间:2020-12-14 01:52:59 所属栏目:百科 来源:网络整理
导读:转自:http://ju.outofmemory.cn/entry/103446 闭包内容挺多的,一次看多了晕菜,直接来个简洁版的,还有疑惑看其他帖子去 闭包(closure)与函数(function) 很多语言都有闭包的概念,比如C中的block,C++的lamda //Global functions,nested functions,and clo

转自:http://ju.outofmemory.cn/entry/103446

闭包内容挺多的,一次看多了晕菜,直接来个简洁版的,还有疑惑看其他帖子去

  1. 闭包(closure)与函数(function)
    很多语言都有闭包的概念,比如C中的block,C++的lamda //Global functions,nested functions,and closure 可以认为函数是特殊形式的闭包,也可以认为闭包是匿名函数,二者基本是通用的。
    无论函数还是闭包,在引用外部变量时,如果变量是在栈上(比如,局部变量),会将其拷贝到堆上,这也是所有语言中的做法。
    1. Global function

       var c = 1 func inc() -> Int { return ++c }
    2. Nested function

       func makeIncrementor() -> (()->(Int)){ Int { c++ return c } return inc } 
    3. Closure

       func makeIncrementor(var c:Int) -> (()->(1 return { () -> Int in c++ return c } }
  2. 闭包的基本形式

     { (parameters) -> (return type) in statements } let reversed = sort(["Jim", "Kate"], { (s1:String, s2:String) -> Bool in return s1 > s2 })// 闭包的函数体部分由关键字 in 引入// 该关键字表示闭包的参数和返回值类型定义已经完成,闭包的函数体即将开始
  3. 类型推导
    可以由上下文推导传入和传出的参数类型,比如sort的原型是 func sort(array: T[],pred: (T,T) –> Bool) –> T[]
    根据第一个String[]就可以知道s1,s2是String类型了,返回值s1>s2自然是Bool类型

    let reversed2 = sort([ { s1, s2 let a = s1.utf16count return s1 > s2 })
  4. 如果只有一条语句的话,return可省略,直接将该语句的值返回,但多条语句return不能省略

    let reversed3 = sort([in s1 > s2 })
  5. 如果不写参数名称,默认是$0,$1,…

    let reversed4 = sort([ { $0 > $1 })
  6. 在这里还可以直接使用运算符函数operator function

    let reversed5 = sort([ >)
  7. 跟function一样,closure的参数默认为let,可以使用var修改

  8. closure是reference type

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读