Swift笔记(五)之函数与闭包(Functions and Closures)

来源:互联网 发布:java分布式爬虫框架 编辑:程序博客网 时间:2024/05/23 21:25

Functions And Closures(函数与闭包)

    函数和闭包2个者联系较大就放在一起说了。     

方法与go语言中很类型。大致讲下不同之处吧。

1:参数名与参数类型用:隔开

2:如果方法有返回值使用->来表示,多个返回值使用()括起来,与参数列表形式一致,例如 func test(name:String)->(n1:String,n2:String)

3:如果该的参数提供了外部参数名,你在调用该方法给这个参数传递值是需要通过外部参数名来传递.例如:func test(name a:String){}  test(name:"shoper").当然也有种简写的办法,这样外部参数名就和参数名一致,func test(#name:String){} test(name:"shoper")

4:swift参数是值传递,如果需要在方法体类改变参数的值,需要使用inout修饰参数,传递参数时使用&取地址符

  

闭包是一种可以被传递和使用的独立的功能块,swift的闭包类似与C和OC的blocks,类似与其他语言的lambdas表达式.

简单介绍下闭包,通过Array的一个sort方法,我们来看一看这个闭包.

var reversed = sort([1,2,3,4],<span style="color:#ffcc33;">{(n1:Int,n2:Int)->Bool in return  n1>n2}</span>)

我们来看看闭包表达式的语法

{ ( parameters ) ->  return type  in     statements}


Swift的闭包表达式简洁,清楚的风格,优化与支持,简洁,无杂乱的语法.主要优化包括:

 

Inferring parameter and return value types from context •//根据上下文推断参数以及返回值类型Implicit returns from single-expression closures •//单行表达式的闭包的隐式返回Shorthand argument names •//简写参数名Trailing closure syntax •//尾随闭包.

下面就介绍下这4个优点:

  • Inferring arameter and return value types from context
        例如:  var reversed = sort([1,2,3,4],{(n1:Int,n2:Int)->Bool in return  n1>n2})我们可以把这个闭包简写为:
        var reversed = sort([1,2,3,4],{n1,n2 in return n1>n2})    我们省去了参数的类型申明以及返回类型申明
  • Implicit returns from single-expression closures
       例如var reversed = sort([1,2,3,4],{n1,n2 in return n1>n2}) 我们可以把这个闭包表达式简写为
       reversed = sort(names, { s1, s2 in s1 > s2 } )
  • Shothand Argument Names
       例如reversed = sort(names, { s1, s2 in s1 > s2 } )我们可以把这个闭包表达式简写为:
       reversed = sort(names, { s1, s2 in s1 > s2 } )
       更或者简写为:Operator Functions(运算符函数)
       reversed = sort(names, >)
  • Trailing Closures
       例如一个函数func someFunctionThatTakesAClosure(closure:()->()){}这个函数传递一个方法,我们可以调用函数时写成
       someFunctionThatTakesAClosure(){}
    Note:当然这样优化的前提是,该函数必须是方法的最后一个参数.

0 0
原创粉丝点击