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)闭包表达式回调用法
*/ 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闭包的更多相关文章
- Swift闭包概念与常见使用场景总结
·Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些 ...
- Swift --闭包表达式与闭包(汇编分析)
在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数! 一.闭包表达式 概念 闭包表达式与定义函数的语法相对比,有区别如下: 去除了func 去除函数名 返回值类型添加了关键 ...
- Swift 闭包(六)
http://blog.csdn.net/huangchentao/article/details/32714185 闭包 Closures 1.闭包表达式 闭包表达式是一种利用简单语法构建内联包的方 ...
- swift 闭包循环引用
当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用.swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量.例如下面 ...
- swift 闭包
闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着 这些常量和变量,俗称闭包. Swift标准库中提供了sort排序函数,sort函数的第二个参数是个闭包.和OC中的bl ...
- [ios][swift]使用swift闭包进行viewcontroller反向传值
闭包参考:http://c.biancheng.net/cpp/html/2285.html 闭包详解 传值参考:http://www.tuicool.com/articles/vy2uUz Sw ...
- swift 闭包简写实际参数名$0、$1等理解
Swift 自动对行内闭包提供简写实际参数名,你也可以通过 $0 , $1 , $2 等名字来引用闭包的实际参数值. 如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对 ...
- Swift闭包(Closure)
语法: { (parameters) ->return type in statements} 实例:采用函数实现: let names =["Chris", "A ...
- swift闭包传值
不知道原理,就知道这么用的,皮毛上的那一点. 寻思着把以前的项目改成swift的,结果了,,, 反向传值 一. //类似于OC中的typedef typealias sendValueClosure= ...
随机推荐
- C# 使用GDI绘制雷达图
最近项目要用C#实现画一个雷达图,搜了搜网上竟然找不到C#画雷达图的解决方案,那么自己实现一个吧 实现效果如下图: 代码如下: public static class RadarDemo { ; ; ...
- (转)深入解析TensorFlow中滑动平均模型与代码实现
本文链接:https://blog.csdn.net/m0_38106113/article/details/81542863 指数加权平均算法的原理 TensorFlow中的滑动平均模型使用的是滑动 ...
- linux中服务(service)管理
一.介绍 服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是Linux 中非常重 ...
- 手把手教你避开组件cover-view的那些坑
腾讯位置服务基于微信提供的小程序插件能力,专注于(围绕)地图功能,打造一系列小程序插件,可以帮助开发者简单.快速的构建小程序,是您实现地图功能的最佳伙伴.目前微信小程序插件提供路线规划.地铁图.地图选 ...
- opencv-python 图像基础处理(二)
图像阈值 ret, dst = cv2.threshold(src, thresh, maxval, type) - src: 输入图,只能输入单通道图像,通常来说为灰度图- dst: 输出图- th ...
- SQL Server有意思的数据类型隐式转换问题
写这篇文章的时候,还真不知道如何取名,也不知道这个该如何将其归类.这个是同事遇到的一个案例,案例比较复杂,这里抽丝剥茧,仅仅构造一个简单的案例来展现一下这个问题.我们先构造测试数据,如下所示: CRE ...
- Linux日志中出现大量dhclient mesage浅析
最近检查发现一台Linux服务器,发现其日志里面有大量下面信息,其中部分信息做了脱敏处理.其中一个地址A(192.168.AAA.AAA) 为DNS服务器地址,地址B(192.168.BBB.BBB) ...
- Shadow Map -- 点阴影(全方位)
昨晚终于把点阴影(深度CubeMap)程序调通了,思想不难,基本就是在上节定向光阴影基础上稍作修改,但是CG程序不太方便Debug,需要输出中间效果图进行判断,耽搁了一会儿. 过程如下: 1.将深度渲 ...
- 机器学习实战之logistic回归分类
利用logistic回归进行分类的主要思想:根据现有数据对分类边界建立回归公式,并以此进行分类. logistic优缺点: 优点:计算代价不高,易于理解和实现.缺点:容易欠拟合,分类精度可能不高. . ...
- 8.jenkins 远程管理
远程原理 在我们之前的操作中,是直接将指令写在jenkins 里面的 .因为是做实验.所以指令比较简单. 如果是正式环境的话,可能指令就比较多了. 我们可以将他写成脚本. 我们可以再 jenkins的 ...