Swift-闭包(九)

        闭包是功能性自包含模块,可以在代码中被传递和使用.

        形式:

            1.全局函数是一个有名字但不会捕获任何值得闭包

            2.嵌套函数是一个有名字并可以捕获其封闭函数域内值得闭包

            3.闭包表达式是一个利用轻量级语法所写的可以捕获其上下文的变量或常量没有名字没有值得闭包.

//声明一个闭包:这是一个无名函数,作为闭包变量的类型

        var myClosure:() -> String

        

        //最简单的闭包

        let myBlock = {

            print("hello")

        }

        myBlock()

        //闭包的完整写法

        let myBlock1 = {()->() in

            print("World")

        }

        myBlock1()

        //带参数的闭包

        let myBlock2 = {(x: Int, y: Int)->() in

            print(x + y)

        }

        

        myBlock2(10, 20)

        //带返回值的闭包

        let myBlock3 = {(x: Int, y: Int)->(Int) in

            return x + y

        }

        print(myBlock3(20, 30))

        

        //闭包作为一个参数

        func someFunctionThatTakesAClosure(closure: () -> ()) {

            //函数部分

        }

        

        someFunctionThatTakesAClosure {

            

        }

        //捕获

        var counter = 0

        let incrementCounter = {

            counter += 1

            print(counter)

        }

        incrementCounter()

        incrementCounter()

        

        print(counter);

        

        //闭包在上下文环境中捕获变量,常量 并在自己的作用域中使用

        func countingClosure() -> () -> Int {

            var counter = 0

            let incrementCounter: () -> Int = {

                counter += 1

                return counter

            }

            return incrementCounter

        }

        let counter1 = countingClosure()

        let counter2 = countingClosure()

        

        //闭包的引用类型

        /*

            无论将闭包还是函数赋值给一个变量还是常量,实际上都是将常量或变量的值设置为对应函数/闭包的引用

         */

        

        //排序

        var names = ["casca", "zxmcn", "zdcv", "miibn"]

        names = names.sorted()

        print(names)

        

        names.sort { (a, b) -> Bool in

            a > b

        }

        print(names)

        

        //遍历

        //forEach

        let values = [7, 4, 9, 10, 1]

        values.forEach { (a) in

            print(a)

        }

        

        //filter:按照规则过滤数组,筛选大于6的数

        let res = values.filter { (a) -> Bool in

            return a > 6

        }

        print(res)

        

        //map 数组映射

        let input = ["0", "12", "3"]

        let number = input.map { (a) -> Int in

            return Int(a)!

        }

        print(number)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值