Swift_闭包(Closure)
2015-11-18 21:18
507 查看
闭包(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_UITableView
- Swift_Singleton
- Swift_UIImageView
- Swift_UIButton
- Swift_UITextField
- Swift_UILabel
- [Swift]NSString、NSData、Base64互转
- swift学习笔记->初始化
- 浅谈swift中的函数类型和闭包
- Swift语言的内存管理哦,还等什么?点进来!
- swift 快速奔跑的兔几 本节的内容是:使用沙盒儿
- iOS中的observer(观察者设计模式)swift版
- ios swift sha1 md5 加密
- Swift语言的函数和闭包
- Swift之mark 注释
- Swift之mark 注释
- Swift之UITableView的使用
- Swift之UITableView的使用
- swift学习基础代码1
- 优秀源码阅读:Swift网络库Alamofire