//
// 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. ASP.NET Core 2.2 WebApi 系列【四】集成Swagger

    Swagger 是一款自动生成在线接口文档+功能测试功能软件 一.安装程序包 通过管理 NuGet 程序包安装,搜索Swashbuckle.AspNetCore 二.配置 Swagger 将 Swag ...

  2. 利用Dynamics 365 Customer Engagement的标准导入功能导入附件。

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  3. error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

    这个报错一般是因为你图像的路径写错了,找不到图像而导致的. 解决问题的朋友麻烦点个推荐呗!嘿嘿

  4. gradle+shell实现自动系统签名

    前言 有时候我们的应用需要系统级的权限来实现一些功能(如静默安装),这时候需要给应用打上系统签名,常规操作打包apk,解压apk,删除META-INF中CERT.RSA和 CERT.SF,然后压缩,用 ...

  5. FLUME NG的基本架构

    Flume简介 Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统.原名是 Flume OG (original generation),但随着 FLume 功能 ...

  6. MySQL之架构简单分析

    上图为MySQL的简易架构图,给您有一个大概的概念,下面我将为您进行进一步的分析. 连接器: 当连接MySQL数据库时,等待的将是MySQL服务端的连接器:连接器的职责是和客户端建立连接.获取权限.维 ...

  7. .deb 包如何安装到指定目录; Ubuntu; Debian like;

    有时候,我们没有root用户的时候,我们进行安装deb包就不能之间安装到系统之中了: 为了方便,我们可以直接解压 dpkg -x same.deb .; 直接解压到当前目录,然后在配置环境变量,即可启 ...

  8. Linux—文件管理

    文件操作 创建文件 [root@localhost ~]# touch a.txt # 创建单个文件 [root@localhost ~]# touch b.txt c.txt # 创建多个文件 删除 ...

  9. [Go] Golang中的面向对象

    struct interface 就可以实现面向对象中的继承,封装,多态 继承的演示:Tsh类型继承People类型,并且使用People类型的方法 多态的演示Tsh类型实现了接口Student,实现 ...

  10. centos7.6 安装Mysql5.7

    #安装Mysqlwget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpmyum localinstall mys ...