Swift_闭包(Closure)

原创 2015年11月18日 21:18:42

闭包(Closure)

在Swift语言中,不再拥有Block这种语法,取而代之的是闭包。
在本人看来,大体功能是一样的,只是名字变了,语法变了而已。
没有想象的那么复杂,come on baby! 


简单语法

声明闭包变量,有两个Int参数,有一个Int返回值,实现求和

var sumClosure: ((Int, Int) -> Int)! = nil

给闭包变量赋值,有如下几种写法

// 方式1:带有参数名,参数类型,返回值类型
sumClosure = { (a: Int, b: Int) -> Int in
    return a + b
}

// 方式2:省略参数类型
sumClosure = { (a, b) -> Int in
    return a + b
}

// 方式3:省略返回值类型
sumClosure = { (a, b) in
    return a + b
}

// 方式4:省略参数的小括号
sumClosure = { a, b in
    return a + b
}

// 方式5:省略参数名
sumClosure = {
    return $0 + $1
}

// 方式6:省略return关键字
sumClosure = {
    $0 + $1
}

调用

// 就像函数一样使用,该传参传参,该接收结果就接收结果
let res = sumClosure(10, 20)
print(res)



给闭包起别名

起别名

// 给无参无返回值的闭包起别名
typealias ClosureName1 = () -> Void

// 给有两个字符串参数和无返回值的闭包起别名
typealias ClosureName2 = (String, String) -> Void

// 给有两个浮点型参数和一个浮点型返回值的闭包起别名
typealias ClosureName3 = (a: Float, b: Float) -> Float

// 给有两个整型参数和两个整形返回值的闭包起别名(返回值是元组)
typealias ClosureName4 = (Int, Int) -> (Int, Int)

使用别名从而简便定义闭包变量

// 使用别名,声明闭包变量
let closure2: ClosureName4 = { (a: Int, b: Int) -> (Int, Int) in
    return (a + b, a - b)
}

// 闭包的使用
let res2 = closure2(10, 20)
print("sum: \(res2.0)  diff: \(res2.1)")



闭包作为函数参数

带有闭包参数的方法定义

func function1(closure: ClosureName1) {
    print("closure before")

    // 调用闭包
    closure()

    print("closure after")
}

带有闭包参数的方法的使用

function1 { () -> Void in
    print("~~~~~~~~~~~~")
    print("closure body")
    print("~~~~~~~~~~~~")
}


在Swift中,我们使用闭包可以实现各种的回调,对我们的程序帮助很大,很多可以使用代理的地方,都可以使用闭包代替,希望大家活学活用


版权声明:本文为博主原创文章,未经博主允许不得转载。

Swift语言精要-闭包(Closure)

闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生。 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包。...

Swift 正向传值以及利用闭包(closure)实现反向传值(七)

直接上代码吧 - - Demo地址 https://github.com/Zhangjingwang1993/closureDemo.git// MainVc let button = UIBut...

swift传值:利用代理(delegate)和闭包(closure)

swift使用delegate和closure进行传值:类似oc的代理和block firstViewController.swift文件 // //  firstViewContro...

Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值

Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值

Swift的函数与函数指针、闭包Closure等相关内容介绍

//函数 //demo1 无参数类型 func testConcat(){ println("测试函数"); } testConcat()//调用demo1 //demo2 多参数,一个返...

swift学习之闭包(closure)

swift 闭包 closure 值捕获 引用类型 Trailing(尾部)闭包 参数名简写

swift之闭包(closure)

swift闭包

Swift3.0基础之详细讲解Closure闭包结构的使用

源码Demo写的很详细,这里不再赘述,如下://创建一个全局的Closure,这是最后应该看的知识点 //方式一:定义一个闭包变量其实就是定义一个特定函数类型的变量,方式如下。因为Closur...
  • hbblzjy
  • hbblzjy
  • 2017年07月21日 10:59
  • 507

Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值

利用了大约一个多小时来搞明白OC中Blocks反向传值和Swift中Closure反向传值的差别,下面直接贴上代码: 一、第一个界面 // Created by 秦志伟 on 14-6-13. ...

Swift基础之闭包Closure学习

首先Swift语言中没有了Block内容,但是你可以通过调用OC文件使用,也可以使用Closure(闭包),实现Block或者Delegae同样反向传值或回调函数的效果,也可以解决函数指针的问题,两者...
  • hbblzjy
  • hbblzjy
  • 2016年09月02日 15:05
  • 657
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift_闭包(Closure)
举报原因:
原因补充:

(最多只允许输入30个字)