美文网首页
Swift 2.1 Closure(闭包)

Swift 2.1 Closure(闭包)

作者: JohnnyLin | 来源:发表于2015-11-25 16:46 被阅读0次

# 闭包(closures)

-/*闭包(Closures

-  *闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。

-  *Swift中的闭包与COC中的blocks和其它编程语言(如Python)中的lambdas类似。

-  *闭包可以捕获和存储上下文中定义的的任何常量和变量的引用。这就是所谓的变量和变量的自封闭,

-  *因此命名为闭包“("Closures").Swift还会处理所有捕获的引用的内存管理。

-  *

-  *全局函数和嵌套函数其实就是特殊的闭包。

-  *闭包的形式有:

-  *1)全局函数都是闭包,有名字但不能捕获任何值。

-  *2)嵌套函数都是闭包,且有名字,也能捕获封闭函数内的值。

-  *3)闭包表达式都是无名闭包,使用轻量级语法,可以根据上下文环境捕获值。

-  *

-  * Swift中的闭包有很多优化的地方:

-  * (1)根据上下文推断参数和返回值类型

-  * (2)从单行表达式闭包中隐式返回(也就是闭包体只有一行代码,可以省略return

-  * (3)可以使用简化参数名,如$0, $1(0开始,表示第i个参数...)

-  * (4)提供了尾随闭包语法(Trailing closure syntax)

-  */


// MARK: -

// MARK: 闭包

import UIKit

var arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({(a:Int,b:Int) -> Bool in

return a > b

})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({a,b in return a>b})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({a,b in a>b})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({$0 > $1})

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace(>)

var 字母数组 = ["a","aaa","abc","b","a","ss","aass"]

字母数组.sortInPlace({ (s1 : String, s2 : String) -> Bool in

if (s1.characters.count != s2.characters.count) {

return s1.characters.count < s2.characters.count

} else {

return s1 < s2

}

})

字母数组

字母数组 = ["a","aaa","abc","b","a","ss","aass"]

字母数组.sortInPlace({

if ($0.characters.count != $1.characters.count) {

return $0.characters.count < $1.characters.count

} else {

return $0 < $1

}

})

//trailing closure

字母数组 = ["a","aaa","abc","b","a","ss","aass"]

字母数组.sortInPlace(){ (s1 : String, s2 : String) -> Bool in

if (s1.characters.count != s2.characters.count) {

return s1.characters.count < s2.characters.count

} else {

return s1 < s2

}

}

字母数组

//captures Values

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({fabs(Float($0 - 5)) > fabs(Float($1 - 5))})

let num = 5

arr = [2,3,5,1,2,5,10,2,5]

arr.sortInPlace({fabs(Float($0 - num)) > fabs(Float($1 - num))})

func calcTotalMiles(todayMiles : Int) -> ()->Int {

var totalMiles = 0

return {totalMiles += todayMiles; return totalMiles;}

}

//twoMiles实际上是闭包,闭包是引用类型的,所以totalMiles已经被闭包所引用,它的值会一直保留在闭包里面而不会为0

let twoMiles = calcTotalMiles(2)

twoMiles()

twoMiles()

let myPlan = twoMiles

myPlan()

twoMiles()

//typealias定义一个闭包closure

//相当于typedef void (^GetNumBlcok)(int num);

typealias GetNumClosure = (num:Int) -> Void

var myClosure : GetNumClosure?

func getNum(closure : (num:Int) -> Void) {

myClosure = closure

}

getNum { (num) -> Void in

//输出调用的值

num

}

myClosure!(num : 5)

myClosure!(num : 4)

相关文章

  • Swift 2.1 Closure(闭包)

    # 闭包(closures) -/*闭包(Closures) - *闭包是自包含的功能代码块,可以在代码中使用或者...

  • Swift5.0 - day4-闭包、属性、方法、下标

    一、闭包 1.1、闭包表达式(Closure Expression)在 Swift 里面可以通过函数 func 定...

  • Swift 5.3 - SE-0279 Multiple Tra

    在最初 Swift 的定义中,当方法的最后一个参数为闭包时,称该闭包为尾随闭包(trailing closure)...

  • Swift closure闭包

    究竟什么是Closure? 说的通俗一点,一个函数加上它捕获的变量一起,才算一个closure //MARK: -...

  • swift:Closure 闭包

    @noescape @autoclosure @autoclosure(escaping)

  • Swift Closure闭包

    函数也是一种闭包 console log 如下 闭包表达式 console log 如下 闭包中的参数类型推断 c...

  • swift 闭包(closure)

    闭包:就是一个函数和它所捕获的变量/常量环境组合起来,称为闭包。1.一般定义在函数内部的函数。2.一般它捕获的是外...

  • Swift 闭包

    @Author Swift 闭包(Closure) 闭包是一种可以在代码中作为参数传递,自含的功能块。 闭包类似于...

  • [Swift5.1] 7-闭包

    闭包表达式(Closure Expression) 在Swift中,可以通过func定义一个函数,也可以通过闭包表...

  • Swift底层原理探索5----闭包

    闭包表达式(Closure Expression) 在Swift中,可以通过func定义一个函数,也可以通过闭包表...

网友评论

      本文标题:Swift 2.1 Closure(闭包)

      本文链接:https://www.haomeiwen.com/subject/eztdhttx.html