//
// 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)闭包表达式回调用法
*/ 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 = ;i<cnt; i++ {
for var j = ; j < cnt-i;j++ {
if (cmp(array[j],array[j+]) == -){
let t = array[j]
array[j] = array[j+]
array[j+] = t
}
}
}
}
var array = [,,,,]
//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 = $ % ,y = $ %
if x>y{
return - }
else if x < y {
return
}
else
{
return
} }
, &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 $ < $ } 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 = ;i<cnt; i++ {
for var j = ; j < cnt-i;j++ {
if (array[j]>array[j+]){
// let t = array[j]
// array[j] = array[j+1]
// array[j+1] = t
swapValue(&array[j], &array[j+])
}
}
}
} var array1 = [,,,,]
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 = func incFunc(v: Int) -> Int {
mt++
return inc + mt + v
}
return incFunc
} let incFunc1 = getIncFunc()
let incFunc2 = getIncFunc() println(incFunc1())
println(incFunc1())
println(incFunc2())

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

  1. Swift闭包概念与常见使用场景总结

    ·Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些 ...

  2. Swift --闭包表达式与闭包(汇编分析)

    在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数! 一.闭包表达式 概念 闭包表达式与定义函数的语法相对比,有区别如下: 去除了func 去除函数名 返回值类型添加了关键 ...

  3. Swift 闭包(六)

    http://blog.csdn.net/huangchentao/article/details/32714185 闭包 Closures 1.闭包表达式 闭包表达式是一种利用简单语法构建内联包的方 ...

  4. swift 闭包循环引用

    当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用.swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量.例如下面 ...

  5. swift 闭包

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着 这些常量和变量,俗称闭包. Swift标准库中提供了sort排序函数,sort函数的第二个参数是个闭包.和OC中的bl ...

  6. [ios][swift]使用swift闭包进行viewcontroller反向传值

    闭包参考:http://c.biancheng.net/cpp/html/2285.html   闭包详解 传值参考:http://www.tuicool.com/articles/vy2uUz Sw ...

  7. swift 闭包简写实际参数名$0、$1等理解

    Swift 自动对行内闭包提供简写实际参数名,你也可以通过 $0 , $1 , $2 等名字来引用闭包的实际参数值. 如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对 ...

  8. Swift闭包(Closure)

    语法: { (parameters) ->return type in statements} 实例:采用函数实现: let names =["Chris", "A ...

  9. swift闭包传值

    不知道原理,就知道这么用的,皮毛上的那一点. 寻思着把以前的项目改成swift的,结果了,,, 反向传值 一. //类似于OC中的typedef typealias sendValueClosure= ...

随机推荐

  1. HTML——CSS基础

    一.引入CSS样式表 1.行内式 通过标记的style属性来设置元素的样式.基本语法如下: <标记名 style="属性1:属性值1; 属性2:属性值2; 属性3:属性值3;" ...

  2. Redis之高可用、集群、云平台搭建(非原创)

    文章大纲 一.基础知识学习二.Redis常见的几种架构及优缺点总结三.Redis之Redis Sentinel(哨兵)实战四.Redis之Redis Cluster(分布式集群)实战五.Java之Je ...

  3. 失败的一天(找bug)

    前天早上来到实验室,准备抓紧时间写写代码,毕竟第二天就是组会了.点了一下鼠标,发现显示屏无法唤醒,然后就准备强制关机再开机(我一般不关机,以前遇到过几次无法唤醒),低头发现主机不亮,然后按了开关也不亮 ...

  4. Redis安装和基本操作

    Redis 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 是属于非关系型数据库1.数据比模型较简单2.需要灵活性更强的IT系统3.对数据库性能 ...

  5. PHP的stdClass

    概述 以下是百度百科对php中的 stdClass的描述: stdClass在PHP5才开始被流行.而stdClass也是zend的一个保留类.stdClass类是PHP的一个内部保留类,初始时没有成 ...

  6. WPF 获取系统 DPI 的多种方法

    原文:WPF 获取系统 DPI 的多种方法 WPF 获取系统 DPI 的多种方法 由于 WPF 的尺寸单位和系统的 DPI 相关,我们有时需要获取 DPI 值来进行一些界面布局的调整,本文汇总了一些 ...

  7. C语言中倒序输出你输入的数。

    int n; scanf("%d",&n); while(n>0) { printf("%d",n%10); n/=10;  //其实就是n的自除 ...

  8. gradle中gredle -q 参数是什么意思

    很多地方在调用 gradle 命令时都加了 -q 参数.该参数用来控制 gradle 的日志级别,可以保证只输出我们需要的内容.

  9. Educational Codeforces Round 76 (Rated for Div. 2) C. Dominated Subarray 水题

    C. Dominated Subarray Let's call an array

  10. Mysql如何在删库后可以不用跑路

    我一直在想,地球上这么多程序员,应该有很多人在团队做项目的时候,出过很大的错误,比如说不小心删了库,活动福利字段多写了个零导致全服务器玩家领到数倍奖励,听了沙雕群友的话执行rm -rf命令. 记得有一 ...