zoukankan      html  css  js  c++  java
  • swif(六)swift闭包

    //
    //  main.swift
    //  LessonSwiftSix
    //
    //  Created by keyan on 15/9/13.
    //  Copyright (c) 2015年 keyan. All rights reserved.
    //
    
    import Foundation
    
    /*
    (1)闭包的概念和分类
    自包含的函数代码块
    全局函数(有名)
    闭包表达式(匿名)--能捕获上下文中德常量或者变量
    嵌套函数(*)
    */
    
    /*
    (2)闭包表达式的语法
    func funcName(参数) -> 返回值类型{
        执行语句
    }
    {
    (参数)->返回值类型 in
        执行语句
    }
    */
    
    let sayhello = {
        println("hello World")
    }
    sayhello()
    
    let add:(Int,Int) ->Int = {
        (a:Int,b:Int)->Int in
        return a + b
    }
    
    println(add(3,5))
    
    /*
    (3)闭包表达式回调用法
    */
    
    
    func showArray (array: [Int]) {
        for x in array {
        print("(x),")
        
        }
        println()
        
    }
    func bubbleSort( cmp:(Int,Int) ->Int,inout array: [Int]){
        let cnt = array.count
        for var i = 1;i<cnt; i++ {
            for var j = 0; j < cnt-i;j++ {
                if (cmp(array[j],array[j+1]) == -1){
                let t = array[j]
                array[j] = array[j+1]
                array[j+1] = t
                }
            }
        }
    }
    var array = [20,3,2,70,8]
    //showArray(array)
    //let intcmp = {
    //    (a:Int,b:Int) -> Int in
    //    if a>b{
    //        return -1
    //        
    //    }
    //    else if a < b {
    //        return 1
    //    }
    //    else
    //    {
    //        return 0
    //    }
    //}
    //swift特有的类型推断
    showArray(array)
    
    /*
    (4)闭包表达式优化
    */
    //bubbleSort(&array,{
    ////    (a,b) in
    //    let x = $0 % 10,y = $1 % 10
    //    if x>y{
    //        return -1
    //        
    //    }
    //    else if x < y {
    //        return 1
    //    }
    //    else
    //    {
    //        return 0
    //    }
    //})
    showArray(array)
    
    
    /*
    (5)尾随闭包
    */
    
    bubbleSort({
        //    (a,b) in
        let x = $0 % 10,y = $1 % 10
        if x>y{
            return -1
            
        }
        else if x < y {
            return 1
        }
        else
        {
            return 0
        }
       
        }
        , &array
    )
    
    //sort(&array,{
    ////    (a: Int,b: Int) -> Bool in
    ////    return a < b
    //    return $0 < $1
    //    
    //})
    //尾随闭包
    sort(&array){
        //    (a: Int,b: Int) -> Bool in
        //    return a < b
        return $0 < $1
        
    }
    
    showArray(array)
    
    /*
    嵌套函数
    */
    
    //func swapValue(inout a : Int,inout b : Int)
    //{
    //    let t = a
    //    a = b
    //    b = t
    //}
    func bubbleSortFunc(inout array: [Int]){
        let cnt = array.count
        //放到内部嵌套函数作用于内部
        func swapValue(inout a : Int,inout b : Int)
        {
            let t = a
            a = b
            b = t
        }
        
        for var i = 1;i<cnt; i++ {
            for var j = 0; j < cnt-i;j++ {
                if (array[j]>array[j+1]){
    //                let t = array[j]
    //                array[j] = array[j+1]
    //                array[j+1] = t
                    swapValue(&array[j], &array[j+1])
                }
            }
        }
    }
    
    var array1 = [5,21,10,2,3]
    bubbleSortFunc(&array1)
    showArray(array1)
    
    
    /*
    (7)闭包捕获值
    */
    //func getIncFunc(inc :Int) -> (Int) -> Int{
    //    func incFunc(v: Int) -> Int {
    //        return 10+v
    //    }
    //    return incFunc
    //}
    func getIncFunc(inc :Int) -> (Int) -> Int{
        var mt = 10
        
        func incFunc(v: Int) -> Int {
            mt++
            return inc + mt + v
        }
        return incFunc
    }
    
    let incFunc1 = getIncFunc(3)
    let incFunc2 = getIncFunc(3)
    
    println(incFunc1(10))
    println(incFunc1(10))
    println(incFunc2(10))
  • 相关阅读:
    java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstract
    Spring MVC controller控制器映射无法访问问题!!!
    关于 use-default-filters 属性的说明
    Spring MVC工程 无法拦截到url请求
    Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
    Spring事务
    MySQL几个join
    解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
    【Mybatis架构】Mapper映射文件中的#{}与${}
    空指针异常(从辅助类获取对象之后需要实例化才能保存信息)
  • 原文地址:https://www.cnblogs.com/keyan1102/p/4805328.html
Copyright © 2011-2022 走看看