//: Playground - noun: a place where people can play

import UIKit

/*

闭包

Swift ====> Closures

Ruby OC ====> Block

Python C++11 ====> Lamba

Javescript =====> Anonymous Function(匿名函数)

*/

//冒泡排序

func sortInts(inout data : [Int], function : (Int,Int)->Bool) {

for var i = 0; i < data.count - 1; i++ {

for var j = 0; j < data.count-1-i; j++ {

if function(data[j], data[j+1]) {

swap(&data[j], &data[j+1])

}

}

}

}

func rule(a : Int, b : Int) ->Bool {

return a > b

}

func rule1(a : Int, b : Int) ->Bool {

return a < b

}

var a = [1, 3, 9, 0, 8, 2, 5, 7, 6, 4]

sortInts(&a, rule)

a

sortInts(&a, rule1)

a

//闭包函数 实际上就是函数 是匿名函数

//{

//    (parameters)->returnType in

//        //语句

//        retrun xxx

//}

sortInts(&a, {

//    (Int,Int)->Bool

(a : Int, b : Int)->Bool in

return a > b

})

a

func rule2(a : Int, b : Int)->Bool{

return a < b

}

sortInts(&a, {

(a : Int, b : Int)->Bool in

return a < b

})

a

//闭包函数有些事可以省略

//可以把参数类型省略,类型从传入的参数中推断出来

sortInts(&a, {

(a, b)->Bool in

return a < b

})

//可以把返回值省略,采用了追踪返回值类型

sortInts(&a, {

(a, b) in

return a < b

})

//如果只有一条语句, 可以省略return

sortInts(&a, {

(a, b) in a < b

})

//参数名可以不用写,使用默认的$0, $1, $2...来代替

sortInts(&a, { $0 < $1 })

//甚至可以直接省略参数,而直接使用运算符来表示函数的内容

sortInts(&a, >)

a

var i : Int = 10

func setNum(inout a : Int,function : (inout Int) ->()) {

function(&a)

}

setNum(&i, {

//(+5 , -10, 100)

(inout a : Int) in a+=20

})

func add_5(inout n : Int) {

n += 5

}

func add_10(inout n : Int) {

n += 10

}

func addArr(inout array : [Int], function : (inout Int)->() ) {

for var i = 0; i < array.count; i++ {

function(&array[i])

}

}

var array = [1, 2, 3, 4, 5]

addArr(&array, add_5)

array

addArr(&array, add_10)

array

//对字符串进行排序,用的是系统自带的排序函数

var names = ["aaa","cdc","add","bbb"]

sort(&names)

names

//Swift 的排序函数 > 从大到小

sort(&names, { (a, b) -> Bool in

a > b

})

sort(&names, <)

//sorted

//map()

let digitNames = [0:"零",1:"一",2:"二",3:"三",4:"四",5:"五",6:"六",7:"七",8:"八",9:"九"]

let numbers = [16, 58, 510]

//map是数组的方法,可以迭代数组中每一个元素传入闭包函数中执行一次,并执行结果生成一个新的数组返回出来

let strings = numbers.map( {

(var number) ->String in

var output = ""

while number > 0{

output = digitNames[number % 10]! + output

number /= 10

}

return output

}

)

let _is = numbers.map( {

(var number) ->Int in

var a = number + 50

return a

}

)

strings

var aa = 10

numbers

_is

Closures闭包的更多相关文章

  1. Swift 中的Closures(闭包)详解

    Swift 中的Closures(闭包)详解 在Swift没有发布之前,所有人使用OC语言编写Cocoa上的程序,而其中经常被人们讨论的其中之一 -- Block 一直备受大家的喜爱.在Swift中, ...

  2. JavaScript Closures 闭包

    在一些编程语言中, 当我们执行完成function中的局部代码仅在函数执行期间可运行. 但是JS 事不一样的 闭包总结来说, 就是innerFunction 总是有使用outer function 的 ...

  3. Swift 06.Closures

    Closures --闭包 看了好些文章.由于自己也是刚开始学习swift,闭包还是不是很明白.暂时先放放.等看完后面的.加深感触后,在回头总结闭包的概念. 数组中常用的闭包函数 在Swift的数组中 ...

  4. 闭包函数&回调函数

    闭包函数&回调函数 谈到回调函数,不得不提匿名函数;匿名函数,也叫闭包函数,也就是没有名字的函数,它可以单独存在,也可以将其赋值给某一个变量.so,先来看一下闭包函数. 闭包函数 php文档: ...

  5. PHP - 闭包Closure和lambda function

    现在的语言没有闭包简直都不好意思说出来. 想要了解闭包是什么,那么就必须知道匿名函数.其实看起来他们其实差不多一个意思. 见php RFC一句话:   End of 2007 a patch was  ...

  6. js closures all in one

    js closures all in one setTimeout 闭包,log(i, arr[¡]) var, let, closures, IIFE "use strict"; ...

  7. Javascript 函数声明、调用、闭包

    1 # Javascript 函数声明.调用.闭包 2 # 一.函数声明 3 # 1.直接声明.浏览器在执行前,会先将变量和函数声明进行提升. 4 fn(); 5 function fn () { 6 ...

  8. Objective-C文章中的生词

    Objective-C http://rypress.com/tutorials/objective-c/index C Basics    http://rypress.com/tutorials/ ...

  9. Lua 架构 The Lua Architecture

    转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...

随机推荐

  1. WPF数据验证(5)―― 错误模板

    <Style TargetType="{x:Type TextBox}">            <Setter Property="Validatio ...

  2. GNU Makeflie

    简介 Gnu Make主要用于构建和管理程序包.Makefile文件描述了整个工程的编译.连接等规则. 其中包括: 工程中的哪些源文件需要编译以及如何编译: 需要创建那些库文件以及如何创建这些库文件: ...

  3. Map实现缓存

    为什么要使用缓存 缓存最终的目的是为减轻服务端压力,减少网络传输请求 客户端缓存 浏览器访问自带缓存~~ 页面缓存 浏览器缓存 App客户端缓存    IOS 前端开发     底层都有缓存技术的 ( ...

  4. vue 做登陆页面 ( 登陆成功后去掉注册和登陆按钮 显示用户名)

    1.当登陆成功  显示用户名且去掉登陆和注册按钮 2.data里声明  后  就在登陆的方法里调用啦 下面说一下登陆的方法. 1.登陆的按钮代码在第一张图片里 2.登陆的弹出框 3.方法 ps:另一种 ...

  5. Oracle中如何用SQL检测字段是否包括中文字符

    用Oracle的编码转换的函数Convert实现,测试后可行. SQL> select *  2    from (select 'abcd' c1 from dual  3          ...

  6. ios 给移动的控件添加点击事件

    前言: 给一个UIView做移动动画,虽然看起来frame在持续改变,但是它的frame已经是最终值了. 也就是说表面看到的动画都是假象,它的真实位置已经是固定的了.所以只有点击在他的真实frame范 ...

  7. bzoj2431逆序对数列——递推

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2431 考虑新加入一个数i,根据放的位置不同,可以产生0~i-1个新逆序对: 所以f[i][j ...

  8. 仿照 QQ 的 cell 的左滑删除、置顶、标记未读效果

    侧滑删除.置顶.取消关注,在iOS8之前需要我们自定义,iOS8时苹果公司推出了新的API,UITableViewRowAction类,我们可以使用该类方便的制作出如下图的效果. 下面是实现的主要代码 ...

  9. this关键字在继承中的使用

    参考:http://blog.csdn.net/gxzzxj/article/details/51946144 下面是自己的代码: public class ChildA extends Father ...

  10. Python网络爬虫之BeautifulSoup模块

    一.介绍: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮 ...