您的位置:首页 > 移动开发 > Swift

swif(六)swift闭包

2015-09-13 18:33 369 查看
//
//  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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: