Closures闭包
//: 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闭包的更多相关文章
- Swift 中的Closures(闭包)详解
Swift 中的Closures(闭包)详解 在Swift没有发布之前,所有人使用OC语言编写Cocoa上的程序,而其中经常被人们讨论的其中之一 -- Block 一直备受大家的喜爱.在Swift中, ...
- JavaScript Closures 闭包
在一些编程语言中, 当我们执行完成function中的局部代码仅在函数执行期间可运行. 但是JS 事不一样的 闭包总结来说, 就是innerFunction 总是有使用outer function 的 ...
- Swift 06.Closures
Closures --闭包 看了好些文章.由于自己也是刚开始学习swift,闭包还是不是很明白.暂时先放放.等看完后面的.加深感触后,在回头总结闭包的概念. 数组中常用的闭包函数 在Swift的数组中 ...
- 闭包函数&回调函数
闭包函数&回调函数 谈到回调函数,不得不提匿名函数;匿名函数,也叫闭包函数,也就是没有名字的函数,它可以单独存在,也可以将其赋值给某一个变量.so,先来看一下闭包函数. 闭包函数 php文档: ...
- PHP - 闭包Closure和lambda function
现在的语言没有闭包简直都不好意思说出来. 想要了解闭包是什么,那么就必须知道匿名函数.其实看起来他们其实差不多一个意思. 见php RFC一句话: End of 2007 a patch was ...
- js closures all in one
js closures all in one setTimeout 闭包,log(i, arr[¡]) var, let, closures, IIFE "use strict"; ...
- Javascript 函数声明、调用、闭包
1 # Javascript 函数声明.调用.闭包 2 # 一.函数声明 3 # 1.直接声明.浏览器在执行前,会先将变量和函数声明进行提升. 4 fn(); 5 function fn () { 6 ...
- Objective-C文章中的生词
Objective-C http://rypress.com/tutorials/objective-c/index C Basics http://rypress.com/tutorials/ ...
- Lua 架构 The Lua Architecture
转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...
随机推荐
- Spring Boot JPA 连接数据库
本文将介绍怎样在Spring Boot project中加入JPA作为持久化方式. 改动 pom.xml 依赖 与上一篇介绍的 jdbc 不同的是 spring-boot-starter-jdbc 改 ...
- gdb调试使用autotools工程的项目
1 保留debug sympol和优化等级设置为-O0的最简单的方法 在执行configure脚本生成Makefile文件时,使用CXXFLAGS宏,因为标准的configure脚本给了这个宏. .. ...
- Sequelize入门一
最近刚开始接触Sequelize,当中遇到不少坑,所以想写篇Sequelize入门和大家分享,避免有道友和我一样爬坑. 学习sequelize的初衷是想解决SQL注入,它支持MySQL, SQLite ...
- thinkphp 防sql注入
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->selec ...
- java android 将 List中元素互换位置
很多时候我要对List中的元素调换位置,这时候可以用如下代码,意思是将data中的index1与index2元素互换位置 //data 为List Collections.swap(data,inde ...
- html5--6-53 阶段练习4-画廊
html5--6-53 阶段练习4-画廊 学习要点 运用所学过的知识完成一个简单的小练习,理解对过渡动画的应用. @charset "utf-8"; /* CSS Document ...
- position属性中的绝对定位和相对定位
absolute(绝对定位):1.如果没有父级DIV,则会根据浏览器原始点去定位,而且跟他相邻的DIV会忽略它,定位后则可用TRBL(top,right,bottom,left)去布局.注意:TRBL ...
- java8的常用的新特征
一.Java 8 对接口做了进一步的增强.(默认方法和静态方法) a. 在接口中可以添加使用 default 关键字修饰的非抽象方法.即:默认方法(或扩展方法不用被实现)如:comparator接口. ...
- bzoj 3653 谈笑风生 —— 主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653 对于一个 (a,b,c),分成 b 是 a 的祖先和 b 在 a 子树里两部分: 第一 ...
- CentOS 6.5升级到CentOS 7
CentOS7 已经发布了,之前一直想在上面测试一下,一直没有机会,这次终于可以感受一下CentOS7了.一直使用CentOS6.5有一段时间了,但是由于它的内核版本依然停留在2.6.32,所以决定升 ...