Swift Function & Closure

Functions

Functions are self-contained chunks of code that perform a specific task. You give a function a name that identifies what it does, and this name is used to “call” the function to perform its task when needed.

函数是以一个用来执行特殊任务的自包含代码块

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158


Closures:

Closures are self-contained blocks of functionality that can be passed around and used in your code. Closures in Swift are similar to blocks in C and Objective-C and to lambdas in other programming languages.

和函数一样也就是代码块,和C,OC里面的block相似,和其他语言的匿名函数相似


https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94

表达式如下:

  • { (parameters) -> return type in
  •     statements
  • }
     
     
Global 和nested函数实际上是closure的特例:

Global函数:一个有名字但不获取任何值的closure

Nested函数:有名字,同时能够获取到他们enclosing function里的值

Closure 式子:一个轻量级语法书写的没有名字的closure,同时能够获取到他所处的 context中的值


这边有个例子

//csdn 竟然没有swift这个语言的标签==

    // 点击操作按钮
    @IBAction func operate(sender: UIButton) {
        let operation = sender.currentTitle!
        if isUserInMiddleOfTypingNumber {
            enter()
        }
        switch operation {
        case "×":performOperation { $0 * $1 } // Trailing closure 这边传入的其实是 function type 这个nested function就可以直接这么写了
        case "÷":performOperation { $0 / $1 }
        case "+":performOperation { $0 + $1 }
        case "−":performOperation { $0 - $1 }
        case "√":performOperationSqrt { sqrt($0)}
        default: break
        }
    }
    
    //  function type as Parameter Type
    func performOperation(operation: (Double, Double) -> Double) {
        if operandStack.count >= 2 {
            displayValue = operation(operandStack.removeLast() , operandStack.removeLast())
            enter()
        }
    }

之前一直看不懂这语法,今天来解释下


function 和closure分别有Trailing functions 和 Trailing Closures  

 //含义为 如果你要传一个closure expression或 function type给function,当作它最后的一个参数时,你可以这么写

func someFunctionThatTakesAClosure(closure: () -> ()) {
    // function body goes here
}
 
// here's how you call this function without using a trailing closure:
 
someFunctionThatTakesAClosure({
    // closure's body goes here
})
 
// here's how you call this function with a trailing closure instead:
 
someFunctionThatTakesAClosure() {
    // trailing closure's body goes here
}

// 如果啊 你要传的这个closure expression是这个function唯一的argument,你连这a pair of parentheses ()都不用写!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值