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= ...
随机推荐
- ASP.NET是什么?
ASP.NET简介 简单来说,ASP.NET 是一个使用 HTML.CSS.JavaScript 和服务器脚本创建网页和网站的开发框架. 微软在2001年开发的第一个版本的ASP.NET,是一种建立在 ...
- 使用 Polly 实现复杂策略(超时重试)
一.背景 第一次接触 Polly 还是在做某个微服务系统的时候,那时只会使用单一的超时策略与重试策略,更加高级的特性就没有再进行学习了.最近开为某个客户开发 PC 端的上位机的时候,客户有个需求,在发 ...
- 如何在父级下访问v-slot的值——vuejs
关于作用域插槽v-slot的用法可以先看看文档 https://cn.vuejs.org/v2/guide/components-slots.html#%E4%BD%9C%E7%94%A8%E5%9F ...
- python3.7安装, 解决pip is configured with locations that require TLS/SSL问题
python3.7安装, 解决pip is configured with locations that require TLS/SSL问题1.安装相关依赖 yum install gcc libff ...
- 如何使用 TRANSPORTABLE = ALWAYS 将PDB移回Non-CDB (Doc ID 2027352.1)
How to Move a PDB Back to a Non-CDB Using TRANSPORTABLE=ALWAYS (Doc ID 2027352.1) APPLIES TO: Oracle ...
- Django—开发具体流程
1.创建Django项目 [root@localhost ~]# django-admin startproject 项目名 [root@localhost ~]# django-admin star ...
- jsp连接mysql出现不支持认证协议的解决办法
错误提示 com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Client does not support authent ...
- Cent OS6.5——网络配置
1.已安装centos 系统,打开虚拟机,并开机进入centos系统 2.进行网络配置,必须先确认以下几个点: 2-1.网络适配器模式是否为NAT模式,点击虚拟机,选择设置 ——选择网络适配器,NAT ...
- AcWing 46. 二叉搜索树的后序遍历序列
地址 https://www.acwing.com/solution/acwing/content/3959/ 题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果. 如果是则返回t ...
- MySQL中使用group_concat遇到的坑
在使用group_concat的过程中遇到个问题,这里记录一下:在MySQL中有个配置参数group_concat_max_len,它会限制使用group_concat返回的最大字符串长度,默认是10 ...