美文网首页
使用闭包的小案例(一)传参和返回值

使用闭包的小案例(一)传参和返回值

作者: 叶子扬 | 来源:发表于2018-01-10 20:21 被阅读0次
需求描述:

在控制器的view上创建一个scrollView,里面添加若干个button

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let sc = UIScrollView()
        sc.backgroundColor = UIColor.red
        let buttonW = 80
        let btnCount = 8
        for i in 0..<btnCount
        {
            let btn = UIButton()
            btn.backgroundColor = UIColor.green
            btn .setTitle("按钮\(i)", for: UIControlState.normal)
            btn.frame = CGRect(x:buttonW*Int(i), y:0, width:buttonW, height:44)
            sc.addSubview(btn)
        }
        sc.frame = CGRect(x:0, y:100, width:view.bounds.size.width, height: 44)
        sc.contentSize = CGSize(width:8*buttonW, height:44)
        view.addSubview(sc)
    }
}

需求描述:用函数实现上面需求,并且创建button个数使用闭包返回

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let sc = creatSubViewsWithCount(buttonCount: { () -> (Int) in
            return 8
        })
        view.addSubview(sc)
    }

    func creatSubViewsWithCount(buttonCount:() -> (Int)) -> UIScrollView {
        let sc = UIScrollView()
        sc.backgroundColor = UIColor.red
        let buttonW = 80
        let btnCount = buttonCount()
        for i in 0..<btnCount
        {
            let btn = UIButton()
            btn.backgroundColor = UIColor.green
            btn .setTitle("按钮\(i)", for: UIControlState.normal)
            btn.frame = CGRect(x:buttonW*Int(i), y:0, width:buttonW, height:44)
            sc.addSubview(btn)
        }
        sc.frame = CGRect(x:0, y:100, width:view.bounds.size.width, height: 44)
        sc.contentSize = CGSize(width:8*buttonW, height:44)
        return sc
    }
}

需求描述:用函数实现上面需求,并且创建子控件个数使用闭包返回,子控件类型是什么,也由另一个闭包决定(即灵活性好,易扩展)

分析:
闭包1返回参数: 返回创建子控件的个数
闭包2传入参数:第几个子控件的索引
闭包2返回参数:第几个新创建的子控件

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        let sc = creatSubViewsWithCount(buttonCount: { () -> (Int) in
            return 8
        }, buttonWithCount: { (index) -> (UIButton) in
            let buttonW = 80
            let btn = UIButton()
            btn.backgroundColor = UIColor.green
            btn .setTitle("按钮\(index)", for: UIControlState.normal)
            btn.frame = CGRect(x:buttonW*Int(index), y:0, width:buttonW, height:44)
            return btn
        })
        view.addSubview(sc)
    }

    func creatSubViewsWithCount(buttonCount:() -> (Int),buttonWithCount:(Int) -> (UIButton)) -> UIScrollView {
        let sc = UIScrollView()
        sc.backgroundColor = UIColor.red
        let buttonW = 80
        let btnCount = buttonCount()
        for i in 0..<btnCount
        {
            let btn = buttonWithCount(i)
            sc.addSubview(btn)
        }
        sc.frame = CGRect(x:0, y:100, width:view.bounds.size.width, height: 44)
        sc.contentSize = CGSize(width:8*buttonW, height:44)
        return sc
    }
}

相关文章

  • 使用闭包的小案例(一)传参和返回值

    需求描述: 在控制器的view上创建一个scrollView,里面添加若干个button 需求描述:用函数实现上面...

  • swift3语法(七)

    闭包 闭包的表达式{ (参数列表) -> 返回值类型 in 代码执行体} 基本使用 // 定义闭包参...

  • SWIFT 闭包

    闭包定义 定义一个闭包闭包 = { (行参) -> 返回值 in // 代码实现 }in 用于区分函数定义和代码实...

  • 闭包的使用

    1.声明一个闭包此为无参无返回值的闭包 2.闭包的实现 3.闭包的调用

  • Web前端------JS高级闭包、沙箱介绍

    闭包介绍 闭包小案例(一) 闭包小案例(二) 闭包小案例(三)--------模拟点赞 效果展示: 沙箱 欢迎关注...

  • swift4 闭包Closure参数捕获表

    一、swift闭包的定义 推荐别名定义闭包,因为很容易、清楚的看出闭包的参数和返回值。别纠结为什么用in作为传入参...

  • JS高级学习:函数

    案例 函数作为返回值 案例2: 闭包 闭包的优缺点:缓存数据 函数模式的闭包:在一个函数中有一个函数 对象模式的闭...

  • Swift--闭包

    闭包的概念 Swift闭包表达式 使用闭包返回值 使用尾随闭包 捕获上下文中的变量和常量 支持闭包有两个前提1、支...

  • Swift Two Day

    swift的函数跟闭包也分为 (无参无返回值,无参有返回值,有参无返回值,有参有返回值)四种情况。可以上代码来看一...

  • Swift 闭包

    1、闭包简介 在讲解闭包之前,我们先讲解一下OC中的block 2、 闭包基本使用 3、闭包的参数和返回值 实例:...

网友评论

      本文标题:使用闭包的小案例(一)传参和返回值

      本文链接:https://www.haomeiwen.com/subject/vxkanxtx.html