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))
时间: 2024-11-05 10:38:46

swif(六)swift闭包的相关文章

Welcome to Swift (苹果官方Swift文档初译与注解三十七)---261~265页(第六章-- 闭包)

Inferring Type From Context 上下文类型判断 因为排序的闭包是作为一个参数传递给函数,因此Swift可以判定这个参数的类型和根据sort函数第二个参数判断返回值的类型.这个参数的类型是(String, String) -> Bool,这意味着 String,String以及Bool类型都不需要在闭包定义的时候声明.因为所有的类型都可以由系统判定.因此,返回箭头以及参数名字的括号都可以省略: reversed = sort(names, { s1, s2 in retur

Swift闭包(Closure)

语法: { (parameters) ->return type in statements} 实例:采用函数实现: let names =["Chris", "Alex", "Ewa", "Barry", "Daniella"] funcbackwards(s1: String, s2: String) -> Bool { return s1 > s2 } var reversed =

SWIFt闭包

闭包的三种形式 1.全局函数是一个有名字但不会捕获任何值的闭包2.嵌套函数是一个有名字并且可以捕获其封闭函数域内值的闭包3.闭包表达式时一个利用轻量级语法缩写的可以捕获其上下文中变量或者常量值的没有名字的闭包 SWIFT闭包中的一些特点 1.利用上下文推断参数和返回值类型2.单表达式闭包可以省略return关键字3.参数名称简写4.Trailing闭包语法 闭包表达式 一般情况下我们采用如下方式使用sort 1 // Playground - noun: a place where people

swift闭包的另一种用法

这不是教程. 当你碰到函数参数需要传递一个闭包(closure)时,一般是可以直接这么传递的(假定无返回): // 教程一般教你在参数位置传递closure: someMethod(arg1, arg2, arg3: { args -> Void in //codes here }) // swift同时有一种“同步”的写法: someMethod(arg1, arg2){ args -> Void in //codes here } swift闭包的另一种用法

Swift——(六)Swift中的值类型

在Swift中,结构体和枚举类型为值类型(Structures and Enumerations),在Stack Overflow上有这样一个问题:结构体中的可变属性只有在使用mutating关键字之后才能被内置的方法修改(如果是不可变属性肯定不可以修改了,这就不用纠结了,不过在Swift中,还有一个例外,那就是构造器Initialization,对于结构体和类的常量实例属性可以在构造器中进行设置,这感觉有点违背常量属性的含义,仔细想想也可以理解,因为实例化的时候,最后调用的是构造器,所以在构造

JavaScript学习总结(十六)——Javascript闭包(Closure)

原文地址: http://www.cnblogs.com/xdp-gacl/p/3703876.html 闭包(closure)是Javascript语言的一个难点,也是它的特色, 很多高级应用都要依靠闭包实现.很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天 在网上看到了一篇讲JavaScript闭包的文章(原文链接), 讲得非常好,这下算是彻底明白了JavaScript的闭包到底是个神马东东以及闭包的用途了,在此写出来和大家分

Welcome to Swift (苹果官方Swift文档初译与注解三十八)---266~271页(第六章-- 闭包)

Trailing Closures(尾闭包) 如果你需要将一个闭包表达式作为参数传递给一个函数,而且参数的位置刚刚好是函数的最后一个,你这个闭包表达式又很长,那么使用尾闭包就显得非常有效(有用). 尾闭包是一个写在跟随函数()外面(或后面)的闭包表达式: func someFunctionThatTakesAClosure(closure: () -> ()) { // function body goes here }  // here's how you call this function

Swift 闭包(六)

http://blog.csdn.net/huangchentao/article/details/32714185 闭包 Closures 1.闭包表达式 闭包表达式是一种利用简单语法构建内联包的方式,提供一些语法优化,使得闭包代码变得更加简单明了 1.1sort函数 Swift标准库提供了sort函数,将已知类型数组中的值进行排序,返回一个与原数组大小相等但元素已正确排序的数组sort函数需要传入两个参数: 1.已知类型的数组 2.传入两个跟数组相同类型参数的闭包函数,并返回一个布尔值告诉s

swift 闭包

swift 中的闭包类似OC中的快代码和java 匿名内部类.它是预先定义了一段可以执行的代码,简单的可以将闭包看做是函数的一种简写 example: 将一个数组按照一定的函数映射成另一个数组 有两种写法: 普通函数的写法: var numbers = [20, 19, 7, 12] “numbers.map({ (number: Int) -> Int in let result = 3 * number return result})” 闭包的形式: var numbers = [20, 1