Swift闭包的使用
闭包的作用
1.提前准备好执行代码
2.在需要的时候执行
3.可以当参数传递
主要的应用场景就是异步,组件,视图等的回调(类似OC的Block和Java的接口回调)。
闭包的定义
定义 :{ 形参列表 -> 返回类型 in
//实现代码
}
示例:
let c1 = { (x: Int, y: Int) -> Int in
return x + y;
}
执行一个闭包
示例:
print(c1(10 ,20));
通过闭包传递参数
闭包参数定义: 参数名: (闭包参数名: 闭包参数类型)->闭包返回类型
示例:
func loadDataTest(completion: @escaping (_ data: String)->()) -> () {
DispatchQueue.global().async {
print("load data...");
Thread.sleep(forTimeInterval: 1.0);
let data = "result";
DispatchQueue.main.async {
completion(data);
}
}
}
传递一个闭包参数
示例:
1.完整的写法
loadDataTest (completion: {(_ result: String) -> () in
print(result);
})
2.去掉参数类型的写法
loadDataTest (completion: {result -> () in
print(result);
})
3.缩略返回类型的写法
//缩写形式
loadDataTest (completion: {result in
print(result);
})
尾随闭包
定义: 如果一个函数的最后一个参数是闭包, 函数参数可以提前结束, 最后一个参数直接使用{}包装闭包的代码
示例:
loadDataTest { (result) in
print(result);
}
可以省略参数类型和返回只类型
示例:
loadDataTest {
print($0);
}