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))
原文地址:https://www.cnblogs.com/keyan1102/p/4805328.html