设为首页 加入收藏

TOP

闭包(一)
2017-10-10 12:13:56 】 浏览:7061
Tags:闭包

/*

 闭包:

 函数是闭包的一种

 类似于OC语言的block

 闭包表达式(匿名函数) -- 能够捕获上下文中的值

 

 语法: in关键字的目的是便于区分返回值和执行语句

 闭包表达式的类型和函数的类型一样, 是参数加上返回值, 也就是in之前的部分

 {

 (参数) -> 返回值类型 in

 执行语句

 }

 

 一般形式:{

 (parameters) -> returnType in

 statements

 }

 */

 

// 完整写法

let say:(String) -> Void = {

    (name: String) -> Void in

    print("hello \(name)")

}

say("HaRi")

 

// 没有返回值写法

let say2:(String) -> Void = {

    (name: String) -> Void in

    print("hi \(name)")

}

say2("HaRi")

 

let say3:() ->Void = {

    print("hello xiaohange")

}

say3()

 

/** 闭包表达式作为回调函数 **/

 

func showArray(array:[Int]) {

    for num in array {

        print("\(num)")

    }

}

showArray(array: [1,2,3,4])

 

/*

// 缺点, 不一定是小到大, 不一定是全部比较, 有可能只比较个位数

// 所以, 如何比较可以交给调用者决定

func bubbleSort(inout array:[Int])

{

    let count = array.count;

    for var i = 1; i < count; i++

    {

        for var j = 0; j < (count - i); j++

        {

            if array[j] > array[j + 1]

            {

                let temp = array[j]

                array[j] = array[j + 1]

                array[j + 1] = temp

            }

        }

    }

}

*/

 

let cmp = {

    (a: Int, b:Int) ->Int in

    if a > b{

        return 1

    }else if a < b

    {

        return -1

    }else

    {

        return 0

    }

}

 

func bubbleSort(array : inout [Int], cmp: (Int, Int) -> Int){

    for _ in 0..<array.count {

        for j in 0..<(array.count - 1) {

            if array[j] > array[j + 1] {

                let temp = array[j]

                array[j] = array[j + 1]

                array[j + 1] = temp

            }

        }

    }

}

 

var arr:Array<Int> = [23, 34, 56, 15, 8]

bubbleSort(array: &arr, cmp: cmp)

showArray(array: arr)

 

// 闭包作为参数传递

bubbleSort(array: &arr, cmp: {

    (a: Int, b: Int) -> Int in

    if a > b{

        return 1

    }else if a < b

    {

        return -1

    }else

    {

        return 0;

    }

})

print("__________________________")

showArray(array: arr)

 

// 如果闭包是最后一个参数, 可以直接将闭包写到参数列表后面, 这样可以提高阅读性, 称之为尾随闭包

bubbleSort(array: &arr){

    (a: Int, b: Int) -> Int in

    if a > b{

        return 1;

    }else if a < b

    {

        return -1;

    }else

    {

 

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇枚举 下一篇函数参数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目