Swift中闭包的简单使用

本人有若干成套学习视频, 可试看! 可试看! 可试看, 重要的事情说三遍 包含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)下载完成"
        }
    }

-按钮点击事件的代码分析


Swift中闭包的简单使用_第1张图片
Snip20160904_1.png
  • 以闭包为参数的函数代码
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)
            })
        }
    }
}

-以闭包为参数的函数代码分析

Swift中闭包的简单使用_第2张图片
Snip20160904_2.png
  • 结果展示
    -点击下载按钮
Swift中闭包的简单使用_第3张图片
Snip20160904_4.png

-3秒钟后

Swift中闭包的简单使用_第4张图片
Snip20160904_5.png

PS. 本人有若干成套学习视频, 包含Java, 数据结构与算法, iOS, 安卓, python, flutter等等, 如有需要, 联系微信tsaievan.

你可能感兴趣的:(Swift中闭包的简单使用)