Swift-闭包

  闭包表达式

 {

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

    执行语句

 }

/*
 1、 闭包表达式
 {
    (参数) -> 返回值类型 in
    执行语句
 }
 */
print("1、 闭包表达式")
let sayHello = {
    print("hello")
}
sayHello()

let add:(Int,Int) -> Int = {
    (a:Int,b:Int) -> Int in
    return a+b
}
print(add(3,2))

/*
 2、 闭包表达式作为函数回调
 {
 (参数) -> 返回值类型 in
 执行语句
 }
 */
print("\n2、 闭包表达式作为函数回调")
func showArray(array:[Int]){
//    for i in array{
//        print("\(i) ")
//    }
    print(array)
}

//冒泡排序
//func bubbleSort(array:inout [Int]){
//    for i in 1 ..< array.count
//    {
//        for j in 0 ..< array.count - i
//        {
//            if array[j] > array[j+1]
//            {
//                let t = array[j]
//                array[j] = array[j + 1]
//                array[j+1] = t
//            }
//        }
//    }
//}
func bubbleSort(array:inout [Int],cmp:(Int,Int) -> Int){
    for i in 1 ..< array.count
    {
        for j in 0 ..< array.count - i
        {
            if cmp(array[j],array[j+1]) == -1
            {
                let t = array[j]
                array[j] = array[j + 1]
                array[j+1] = t
            }
        }
    }
}


var arr = [20,30,4,5,80]
showArray(array:arr)
let intCmp:(Int,Int) -> Int = {
    (a:Int,b:Int) -> Int in
    if a>b{
        return -1
    }else if a<b {
        return 1
    }
    else{
        return 0
    }
}
//bubbleSort(array: &arr)
//bubbleSort(array: &arr,cmp:intCmp)

//闭包表达式优化(类型推断机制--根据已经定义好的参数、返回值类型进行省略,且可以使用$符号进行参数省略,即 $0: 表示第一个参数)
bubbleSort(array:&arr,cmp:{
    if $0>$1 {
        return -1
    }else if $0<$1 {
        return 1
    }
    else{
        return 0
    }
})
showArray(array: arr)

//.sort-系统冒泡排序
arr.sort{
    (a:Int,b:Int) -> Bool in
    return a>b
}
showArray(array: arr)

/*
 3、嵌套函数
 */
print("\n3、嵌套函数")
func swap(a:inout Int,b:inout Int){
    let t = a
    a = b
    b = t
}

//冒泡排序
func bubbleSortFunc(array:inout [Int]){
    for i in 1 ..< array.count
    {
        for j in 0 ..< array.count - i
        {
            if array[j] > array[j+1]
            {
                swap(a:&array[j], b:&array[j+1])
            }
        }
    }
}
bubbleSortFunc(array: &arr)
showArray(array: arr)

/*
 4、闭包捕获值
 */
print("\n4、闭包捕获值")
//嵌套函数
func getFuncValue(inc:Int) -> (Int) -> Int{
    //内部函数(局部的),捕获了上下文的值
    var m = 10 //对值进行保存并增加
    func inFunc(v:Int) -> Int{
        //var m = 10 //写在里面值不会被保存增加
        m += 1
        return inc+v+m
    }
    return inFunc
}
let getFunc1 = getFuncValue(inc: 2)
let getFunc2 = getFuncValue(inc: 2)//每个函数都有自己独有的一份闭包
print(getFunc1(10))
//这时将m = 11当成了一个全局变量进行保存,因此值在不断增加
print(getFunc1(10))
print(getFunc2(10))


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值