本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含Java
, 数据结构与算法
, iOS
, 安卓
, python
, flutter
等等, 如有需要, 联系微信tsaievan
.
闭包是Swift中比较关键,且有点绕的一个知识点,现在总结一下闭包的超简单使用,这只是一个开始,想要精通,还需要多敲demo
需求:
- 模拟下载电影的操作
-点击下载按钮后,显示"正在下载中..."
-异步下载后,模拟延迟3.0秒后拿到电影的名字,显示在label上
代码
- 先设置一个label属性
import UIKit
class ViewController: UIViewController {
lazy var label = UILabel(frame: CGRectMake(20,100,300,50))
- viewDidload中的代码
override func viewDidLoad() {
super.viewDidLoad()
// 先添加一个简单的label到界面上,设置好frame值
label.backgroundColor = UIColor.yellowColor()
view.addSubview(label)
// 再添加一个button到界面上
let btn = UIButton(frame: CGRectMake(100, 200,100,50))
btn.backgroundColor = UIColor.redColor()
let str = "下载"
btn.setTitle(str, forState: UIControlState.Normal)
view.addSubview(btn)
// 为按钮添加点击事件
btn.addTarget(self, action: "download", forControlEvents: UIControlEvents.TouchUpInside)
}
- 按钮点击事件的代码
func download()
label.text = "正在下载中..."
download{
(movieName:String) -> Void in
self.label.text = "\(movieName)下载完成"
}
}
-按钮点击事件的代码分析
- 以闭包为参数的函数代码
func download(callBack:(String)->Void){
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
NSThread.sleepForTimeInterval(3)
let movieName = "诺曼底登陆"
dispatch_async(dispatch_get_main_queue(), { () -> Void in
callBack(movieName)
})
}
}
}
-以闭包为参数的函数代码分析
- 结果展示
-点击下载按钮
-3秒钟后