zoukankan      html  css  js  c++  java
  • swift闭包_002_swift闭包

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    //-----闭包-------//
    //是独立的代码块,可以代码中进行传递和使用
    //swift中的闭包和OC中的block相似
    //函数是一种特殊的闭包,是有名称的闭包
    
    //1.基本使用
    /*
    闭包的语法:
    { (参数1,参数2) -> 返回值类型 in
        闭包的代码
    }
    */
    func add(a:Int, b:Int) -> Int {
        
        return a + b
        
    }
    
    let closure = {(a:Int, b:Int) -> Int in
        
        return a + b
    }
    
    add(1, b: 2)
    closure(1, 2)
    
    //闭包的类型就是函数类型
    let closure2 : (Int, Int)->Int = {(a:Int, b:Int) -> Int in
        
        return a + b
    }
    //闭包语法的简化,如果想省略闭包中参数和返回值的类型则需要显式的指定闭包变量的类型
    let closure3 : (Int, Int)->Int = {a,b in
        return a + b
        
    }
    
    //单表达式引式返回:如果闭包的代码中只有一个表达式,则return可以省略
    let closure4:(Int, Int)->Int = {a,b in a + b}
    closure4(10,5)
    
    //参数名也可以省略
    let closure5:(Int, Int)->Int = {$0 + $1}
    closure5(1,2)
    
    //2.分别用函数和闭包实现数组中元素的遍历(对数组中每个元素执行某段代码)
    func emnumerateArray(array : [Int], function: (Int) -> Void) {
        
        for item in array {
            function(item)
        }
    }
    
    //每个元素将要执行的函数
    func printItem(var item: Int) {
    
        item++
        print(item)
    }
    
    let array = [1, 2, 3, 7]
    //emnumerateArray(array, function: printItem)
    
    let closure6 = { (item: Int) -> Void in
        print(item)
    }
    
    emnumerateArray(array, function: closure6)
    
    emnumerateArray(array, function: { (item: Int) -> Void in
        print(item)
        }
    )
    
    //3.尾随闭包:如果闭包是最后一个参数,可以把闭包表达式写在函数参数()的后面,用来增加代码可读性
    emnumerateArray(array) { (item : Int) -> Void in
         print(item)
    }
    
    
    //4.闭包捕获值
    func makeIncrement(forIncrementor amount: Int) -> (Void)->Int {
        
        var total = 0
        
        //嵌套函数可以捕获外部函数的变量或者常量
    //    func incrementor() -> Int {
    //        
    //        total += amount
    //        print("total = (total)")
    //        
    //        return total
    //    }
    //    
    //    return incrementor
        
        //闭包可以捕获外部定义的变量或者常量
        let incrementor1 : (Void)->Int = {  (Void)->Int in
            
            total += amount
            print("total = (total)")
    
            return total
            
        }
        
        return incrementor1
        
        
    }
    
    let closure7 = makeIncrement(forIncrementor: 2)
    closure7()
    closure7()
    
    //闭包是引用类型
    let closure8 = makeIncrement(forIncrementor: 3)
    closure8()
    closure8()
    
    let closure9 = closure8
    closure9()
    
    var a = 0 //Int
    var b = a
    a = a + 1
    
    print(b)
    时光见证了成长,还很无知,我想一点点幼稚转为有知!
  • 相关阅读:
    perl自定义简易的面向对象的栈与队列类
    java idea实现.java文件编译成class并运行
    git代码管理及提交
    k8s和docker的区别
    pycharm查看代码结构的方法
    ssh 登录的方式
    excel分析数据绘制统计直方图
    linux普通用户使用yum安装nginx,并使用nginx
    iterm2 + virtualbox + centos环境搭建
    python源码安装
  • 原文地址:https://www.cnblogs.com/foreveriOS/p/5563767.html
Copyright © 2011-2022 走看看