您的位置:首页 > 移动开发 > Swift

swift 基础学习(7) - 闭包

2017-04-12 00:00 357 查看
摘要: 闭包类似于 OC 的bock,但是比OC的block应用更广

// MARK: - 闭包
/**
闭包类似于 OC 的bock,但是比OC的block应用更广
1,在OC 中block是匿名的函数
2,在swift中 函数是特殊的闭包

闭包的应用场景
1,异步执行完成回调
2,控制器间的回调
3,自定义视图回调

*/
/**
闭包:
1,提前准备好的代码
2,在需要的时候执行
3,可以当做参数传递
4,注意self循环引用
*/

// 1 最简单的闭包
// 类型()-》()没有参数,没有返回值的函数,可以连 in 省略
let b1 = {
print("hello")
}
// 执行闭包
b1()


// 2 带参数的闭包
// 闭包中的 参数,返回值 ,实现代码都是卸载{}中 {型参列表 -> 返回值  in   代码实现}
// 注意: 需要使用关键字 “in” 分割定义和实现
// (Int) -> () 有参无返回值
let b2 = { (x: Int) -> () in
print(x)
}
// 执行
b2(100)

// 3 带参数,有返回值的闭包
// (Int, Int) -> Int
let b3 = { (x : Int , y : Int) -> Int  in
return x + y
}
// 执行
print(b3(10, 110))

// 4 无参数,有返回值的闭包
let b4 = { () -> String in
return "傻逼"
}
print(b4())

// 实例: 闭包的回调
func loadData(completion:@escaping (_ resoult: [String])->()) -> () {

DispatchQueue.global().async {
print("耗时操作,如网络请求 \(Thread.current)")
}

//模拟请求的数据
let json = ["hah","adfa","dsfdf"]

DispatchQueue.main.async {
print("回到主线程更行UI\(Thread.current)")

// 闭包作为参数的 调用
completion(json)
}
}

// 调用
loadData { (json) in
print(json)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Swift 闭包 block 回调